<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/pgtable.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/pgtable.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfUEdUQUJMRV9IXzA_"><span class="b">_ASM_X86_PGTABLE_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfUEdUQUJMRV9IXzA_"><span class="b">_ASM_X86_PGTABLE_H</span></a>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">page</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="5" /><span class="True">       5:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">e820</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="6" /><span class="True">       6:</span> 
<a name="7" /><span class="True">       7:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">pgtable_types</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="8" /><span class="True">       8:</span> 
<a name="9" /><span class="True">       9:</span> <span class="k">/*</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> * Macro to mark a page protection value as UC-</span>
<a name="11" /><span class="True">      11:</span> <span class="k"> */</span>
<a name="12" /><span class="True">      12:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cGdwcm90X25vbmNhY2hlZF8w"><span class="b">pgprot_noncached</span></a><span class="f">(</span><span class="b">prot</span><span class="f">)</span>                    \
<a name="13" /><span class="True">      13:</span>     <span class="f">(</span><span class="f">(</span><span class="b">boot_cpu_data</span><span class="f">.</span><span class="b">x86</span> <span class="f">&gt;</span> <span class="c">3</span><span class="f">)</span>                \
<a name="14" /><span class="True">      14:</span>      <span class="f">?</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_X19wZ3Byb3RfMA__"><span class="b">__pgprot</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_cGdwcm90X3ZhbF8w"><span class="b">pgprot_val</span></a><span class="f">(</span><span class="b">prot</span><span class="f">)</span> <span class="f">|</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfQ0FDSEVfVUNfTUlOVVNfMA__"><span class="b">_PAGE_CACHE_UC_MINUS</span></a><span class="f">)</span><span class="f">)</span>    \
<a name="15" /><span class="True">      15:</span>      <span class="f">:</span> <span class="f">(</span><span class="b">prot</span><span class="f">)</span><span class="f">)</span>
<a name="16" /><span class="True">      16:</span> 
<a name="17" /><span class="True">      17:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__ASSEMBLY__</span>
<a name="18" /><span class="True">      18:</span> 
<a name="19" /><span class="True">      19:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">x86_init</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="20" /><span class="True">      20:</span> 
<a name="21" /><span class="True">      21:</span> <span class="k">/*</span>
<a name="22" /><span class="True">      22:</span> <span class="k"> * ZERO_PAGE is a global shared page that is always zero: used</span>
<a name="23" /><span class="True">      23:</span> <span class="k"> * for zero-mapped memory areas etc..</span>
<a name="24" /><span class="True">      24:</span> <span class="k"> */</span>
<a name="25" /><span class="True">      25:</span> <span class="m">extern</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">empty_zero_page</span><span class="f">[</span><a href="cpu.c_macros_ref.html#_UEFHRV9TSVpFXzA_"><span class="b">PAGE_SIZE</span></a> <span class="f">/</span> <span class="m">sizeof</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="f">]</span>
<a name="26" /><span class="True">      26:</span>     <a href="cpu.c_macros_ref.html#_X192aXNpYmxlXzA_"><span class="b">__visible</span></a><span class="f">;</span>
<a name="27" /><span class="True">      27:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_WkVST19QQUdFXzA_"><span class="b">ZERO_PAGE</span></a><span class="f">(</span><span class="b">vaddr</span><span class="f">)</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_dmlydF90b19wYWdlXzA_"><span class="b">virt_to_page</span></a><span class="f">(</span><span class="b">empty_zero_page</span><span class="f">)</span><span class="f">)</span>
<a name="28" /><span class="True">      28:</span> 
<a name="29" /><span class="True">      29:</span> <span class="m">extern</span> <span class="b">spinlock_t</span> <span class="b">pgd_lock</span><span class="f">;</span>
<a name="30" /><span class="True">      30:</span> <span class="m">extern</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="b">pgd_list</span><span class="f">;</span>
<a name="31" /><span class="True">      31:</span> 
<a name="32" /><span class="True">      32:</span> <span class="m">extern</span> <span class="m">struct</span> <span class="b">mm_struct</span> <span class="f">*</span><span class="b">pgd_page_get_mm</span><span class="f">(</span><span class="m">struct</span> <span class="b">page</span> <span class="f">*</span><span class="b">page</span><span class="f">)</span><span class="f">;</span>
<a name="33" /><span class="True">      33:</span> 
<a name="34" /><span class="False">      34:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_PARAVIRT</span>
<a name="35" /><span class="False">      35:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">paravirt</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="36" /><span class="True">      36:</span> <span class="f">#</span><span class="n">else</span>  <span class="k">/* !CONFIG_PARAVIRT */</span>
<a name="37" /><span class="True">      37:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c2V0X3B0ZV8w"><span class="b">set_pte</span></a><span class="f">(</span><span class="b">ptep</span><span class="f">,</span> <span class="b">pte</span><span class="f">)</span>        <span class="b">native_set_pte</span><span class="f">(</span><span class="b">ptep</span><span class="f">,</span> <span class="b">pte</span><span class="f">)</span>
<a name="38" /><span class="True">      38:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_c2V0X3B0ZV9hdF8w"><span class="b">set_pte_at</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">ptep</span><span class="f">,</span> <span class="b">pte</span><span class="f">)</span>    <span class="b">native_set_pte_at</span><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">ptep</span><span class="f">,</span> <span class="b">pte</span><span class="f">)</span>
<a name="39" /><span class="True">      39:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c2V0X3BtZF9hdF8w"><span class="b">set_pmd_at</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">pmdp</span><span class="f">,</span> <span class="b">pmd</span><span class="f">)</span>    <span class="b">native_set_pmd_at</span><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">pmdp</span><span class="f">,</span> <span class="b">pmd</span><span class="f">)</span>
<a name="40" /><span class="True">      40:</span> 
<a name="41" /><span class="True">      41:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c2V0X3B0ZV9hdG9taWNfMA__"><span class="b">set_pte_atomic</span></a><span class="f">(</span><span class="b">ptep</span><span class="f">,</span> <span class="b">pte</span><span class="f">)</span>                    \
<a name="42" /><span class="True">      42:</span>     <span class="b">native_set_pte_atomic</span><span class="f">(</span><span class="b">ptep</span><span class="f">,</span> <span class="b">pte</span><span class="f">)</span>
<a name="43" /><span class="True">      43:</span> 
<a name="44" /><span class="True">      44:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c2V0X3BtZF8w"><span class="b">set_pmd</span></a><span class="f">(</span><span class="b">pmdp</span><span class="f">,</span> <span class="b">pmd</span><span class="f">)</span>        <span class="b">native_set_pmd</span><span class="f">(</span><span class="b">pmdp</span><span class="f">,</span> <span class="b">pmd</span><span class="f">)</span>
<a name="45" /><span class="True">      45:</span> 
<a name="46" /><span class="True">      46:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__PAGETABLE_PUD_FOLDED</span>
<a name="47" /><span class="True">      47:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_c2V0X3BnZF8w"><span class="b">set_pgd</span></a><span class="f">(</span><span class="b">pgdp</span><span class="f">,</span> <span class="b">pgd</span><span class="f">)</span>        <span class="b">native_set_pgd</span><span class="f">(</span><span class="b">pgdp</span><span class="f">,</span> <span class="b">pgd</span><span class="f">)</span>
<a name="48" /><span class="True">      48:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cGdkX2NsZWFyXzA_"><span class="b">pgd_clear</span></a><span class="f">(</span><span class="b">pgd</span><span class="f">)</span>            <span class="b">native_pgd_clear</span><span class="f">(</span><span class="b">pgd</span><span class="f">)</span>
<a name="49" /><span class="True">      49:</span> <span class="f">#</span><span class="n">endif</span>
<a name="50" /><span class="True">      50:</span> 
<a name="51" /><span class="True">      51:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_c2V0X3B1ZF8w"><span class="b">set_pud</span></a>
<a name="52" /><span class="True">      52:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_c2V0X3B1ZF8w"><span class="b">set_pud</span></a><span class="f">(</span><span class="b">pudp</span><span class="f">,</span> <span class="b">pud</span><span class="f">)</span>        <span class="b">native_set_pud</span><span class="f">(</span><span class="b">pudp</span><span class="f">,</span> <span class="b">pud</span><span class="f">)</span>
<a name="53" /><span class="True">      53:</span> <span class="f">#</span><span class="n">endif</span>
<a name="54" /><span class="True">      54:</span> 
<a name="55" /><span class="True">      55:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__PAGETABLE_PMD_FOLDED</span>
<a name="56" /><span class="True">      56:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cHVkX2NsZWFyXzA_"><span class="b">pud_clear</span></a><span class="f">(</span><span class="b">pud</span><span class="f">)</span>            <span class="b">native_pud_clear</span><span class="f">(</span><span class="b">pud</span><span class="f">)</span>
<a name="57" /><span class="True">      57:</span> <span class="f">#</span><span class="n">endif</span>
<a name="58" /><span class="True">      58:</span> 
<a name="59" /><span class="True">      59:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cHRlX2NsZWFyXzA_"><span class="b">pte_clear</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">ptep</span><span class="f">)</span>    <span class="b">native_pte_clear</span><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">ptep</span><span class="f">)</span>
<a name="60" /><span class="True">      60:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cG1kX2NsZWFyXzA_"><span class="b">pmd_clear</span></a><span class="f">(</span><span class="b">pmd</span><span class="f">)</span>            <span class="b">native_pmd_clear</span><span class="f">(</span><span class="b">pmd</span><span class="f">)</span>
<a name="61" /><span class="True">      61:</span> 
<a name="62" /><span class="True">      62:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cHRlX3VwZGF0ZV8w"><span class="b">pte_update</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">ptep</span><span class="f">)</span>              <span class="m">do</span> <span class="f">{</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="63" /><span class="True">      63:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cHRlX3VwZGF0ZV9kZWZlcl8w"><span class="b">pte_update_defer</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">ptep</span><span class="f">)</span>        <span class="m">do</span> <span class="f">{</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="64" /><span class="True">      64:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cG1kX3VwZGF0ZV8w"><span class="b">pmd_update</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">ptep</span><span class="f">)</span>              <span class="m">do</span> <span class="f">{</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="65" /><span class="True">      65:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cG1kX3VwZGF0ZV9kZWZlcl8w"><span class="b">pmd_update_defer</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">ptep</span><span class="f">)</span>        <span class="m">do</span> <span class="f">{</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="66" /><span class="True">      66:</span> 
<a name="67" /><span class="True">      67:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cGdkX3ZhbF8w"><span class="b">pgd_val</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">native_pgd_val</span><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="68" /><span class="True">      68:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19wZ2RfMA__"><span class="b">__pgd</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">native_make_pgd</span><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="69" /><span class="True">      69:</span> 
<a name="70" /><span class="True">      70:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__PAGETABLE_PUD_FOLDED</span>
<a name="71" /><span class="True">      71:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cHVkX3ZhbF8w"><span class="b">pud_val</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">native_pud_val</span><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="72" /><span class="True">      72:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19wdWRfMA__"><span class="b">__pud</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">native_make_pud</span><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="73" /><span class="True">      73:</span> <span class="f">#</span><span class="n">endif</span>
<a name="74" /><span class="True">      74:</span> 
<a name="75" /><span class="True">      75:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__PAGETABLE_PMD_FOLDED</span>
<a name="76" /><span class="True">      76:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cG1kX3ZhbF8w"><span class="b">pmd_val</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">native_pmd_val</span><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="77" /><span class="True">      77:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19wbWRfMA__"><span class="b">__pmd</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">native_make_pmd</span><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="78" /><span class="True">      78:</span> <span class="f">#</span><span class="n">endif</span>
<a name="79" /><span class="True">      79:</span> 
<a name="80" /><span class="True">      80:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cHRlX3ZhbF8w"><span class="b">pte_val</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">native_pte_val</span><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="81" /><span class="True">      81:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19wdGVfMA__"><span class="b">__pte</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="b">native_make_pte</span><span class="f">(</span><span class="b">x</span><span class="f">)</span>
<a name="82" /><span class="True">      82:</span> 
<a name="83" /><span class="True">      83:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_YXJjaF9lbmRfY29udGV4dF9zd2l0Y2hfMA__"><span class="b">arch_end_context_switch</span></a><span class="f">(</span><span class="b">prev</span><span class="f">)</span>    <span class="m">do</span> <span class="f">{</span><span class="f">}</span> <span class="m">while</span><span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="84" /><span class="True">      84:</span> 
<a name="85" /><span class="True">      85:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* CONFIG_PARAVIRT */</span>
<a name="86" /><span class="True">      86:</span> 
<a name="87" /><span class="True">      87:</span> <span class="k">/*</span>
<a name="88" /><span class="True">      88:</span> <span class="k"> * The following only work if pte_present() is true.</span>
<a name="89" /><span class="True">      89:</span> <span class="k"> * Undefined behaviour if not..</span>
<a name="90" /><span class="True">      90:</span> <span class="k"> */</span>
<a name="91" /><span class="True">      91:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_dirty</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="92" /><span class="True">      92:</span> <span class="f">{</span>
<a name="93" /><span class="True">      93:</span>     <span class="m">return</span> <span class="b">pte_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfRElSVFlfMA__"><span class="b">_PAGE_DIRTY</span></a><span class="f">;</span>
<a name="94" /><span class="True">      94:</span> <span class="f">}</span>
<a name="95" /><span class="True">      95:</span> 
<a name="96" /><span class="True">      96:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_young</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="97" /><span class="True">      97:</span> <span class="f">{</span>
<a name="98" /><span class="True">      98:</span>     <span class="m">return</span> <span class="b">pte_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfQUNDRVNTRURfMA__"><span class="b">_PAGE_ACCESSED</span></a><span class="f">;</span>
<a name="99" /><span class="True">      99:</span> <span class="f">}</span>
<a name="100" /><span class="True">     100:</span> 
<a name="101" /><span class="True">     101:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pmd_young</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="102" /><span class="True">     102:</span> <span class="f">{</span>
<a name="103" /><span class="True">     103:</span>     <span class="m">return</span> <span class="b">pmd_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfQUNDRVNTRURfMA__"><span class="b">_PAGE_ACCESSED</span></a><span class="f">;</span>
<a name="104" /><span class="True">     104:</span> <span class="f">}</span>
<a name="105" /><span class="True">     105:</span> 
<a name="106" /><span class="True">     106:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_write</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="107" /><span class="True">     107:</span> <span class="f">{</span>
<a name="108" /><span class="True">     108:</span>     <span class="m">return</span> <span class="b">pte_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUldfMA__"><span class="b">_PAGE_RW</span></a><span class="f">;</span>
<a name="109" /><span class="True">     109:</span> <span class="f">}</span>
<a name="110" /><span class="True">     110:</span> 
<a name="111" /><span class="True">     111:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_file</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="112" /><span class="True">     112:</span> <span class="f">{</span>
<a name="113" /><span class="True">     113:</span>     <span class="m">return</span> <span class="b">pte_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfRklMRV8w"><span class="b">_PAGE_FILE</span></a><span class="f">;</span>
<a name="114" /><span class="True">     114:</span> <span class="f">}</span>
<a name="115" /><span class="True">     115:</span> 
<a name="116" /><span class="True">     116:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_huge</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="117" /><span class="True">     117:</span> <span class="f">{</span>
<a name="118" /><span class="True">     118:</span>     <span class="m">return</span> <span class="b">pte_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFNFXzA_"><span class="b">_PAGE_PSE</span></a><span class="f">;</span>
<a name="119" /><span class="True">     119:</span> <span class="f">}</span>
<a name="120" /><span class="True">     120:</span> 
<a name="121" /><span class="True">     121:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_global</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="122" /><span class="True">     122:</span> <span class="f">{</span>
<a name="123" /><span class="True">     123:</span>     <span class="m">return</span> <span class="b">pte_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfR0xPQkFMXzA_"><span class="b">_PAGE_GLOBAL</span></a><span class="f">;</span>
<a name="124" /><span class="True">     124:</span> <span class="f">}</span>
<a name="125" /><span class="True">     125:</span> 
<a name="126" /><span class="True">     126:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_exec</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="127" /><span class="True">     127:</span> <span class="f">{</span>
<a name="128" /><span class="True">     128:</span>     <span class="m">return</span> <span class="f">!</span><span class="f">(</span><span class="b">pte_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfTlhfMA__"><span class="b">_PAGE_NX</span></a><span class="f">)</span><span class="f">;</span>
<a name="129" /><span class="True">     129:</span> <span class="f">}</span>
<a name="130" /><span class="True">     130:</span> 
<a name="131" /><span class="True">     131:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_special</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="132" /><span class="True">     132:</span> <span class="f">{</span>
<a name="133" /><span class="True">     133:</span>     <span class="m">return</span> <span class="b">pte_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU1BFQ0lBTF8w"><span class="b">_PAGE_SPECIAL</span></a><span class="f">;</span>
<a name="134" /><span class="True">     134:</span> <span class="f">}</span>
<a name="135" /><span class="True">     135:</span> 
<a name="136" /><span class="True">     136:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">pte_pfn</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="137" /><span class="True">     137:</span> <span class="f">{</span>
<a name="138" /><span class="True">     138:</span>     <span class="m">return</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_cHRlX3ZhbF8w"><span class="b">pte_val</span></a><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_UFRFX1BGTl9NQVNLXzA_"><span class="b">PTE_PFN_MASK</span></a><span class="f">)</span> <span class="f">&gt;&gt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">;</span>
<a name="139" /><span class="True">     139:</span> <span class="f">}</span>
<a name="140" /><span class="True">     140:</span> 
<a name="141" /><span class="True">     141:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">pmd_pfn</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="142" /><span class="True">     142:</span> <span class="f">{</span>
<a name="143" /><span class="True">     143:</span>     <span class="m">return</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_cG1kX3ZhbF8w"><span class="b">pmd_val</span></a><span class="f">(</span><span class="b">pmd</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_UFRFX1BGTl9NQVNLXzA_"><span class="b">PTE_PFN_MASK</span></a><span class="f">)</span> <span class="f">&gt;&gt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">;</span>
<a name="144" /><span class="True">     144:</span> <span class="f">}</span>
<a name="145" /><span class="True">     145:</span> 
<a name="146" /><span class="True">     146:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">pud_pfn</span><span class="f">(</span><span class="b">pud_t</span> <span class="b">pud</span><span class="f">)</span>
<a name="147" /><span class="True">     147:</span> <span class="f">{</span>
<a name="148" /><span class="True">     148:</span>     <span class="m">return</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_cHVkX3ZhbF8w"><span class="b">pud_val</span></a><span class="f">(</span><span class="b">pud</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_UFRFX1BGTl9NQVNLXzA_"><span class="b">PTE_PFN_MASK</span></a><span class="f">)</span> <span class="f">&gt;&gt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">;</span>
<a name="149" /><span class="True">     149:</span> <span class="f">}</span>
<a name="150" /><span class="True">     150:</span> 
<a name="151" /><span class="True">     151:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cHRlX3BhZ2VfMA__"><span class="b">pte_page</span></a><span class="f">(</span><span class="b">pte</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGZuX3RvX3BhZ2VfMA__"><span class="b">pfn_to_page</span></a><span class="f">(</span><span class="b">pte_pfn</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span><span class="f">)</span>
<a name="152" /><span class="True">     152:</span> 
<a name="153" /><span class="True">     153:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pmd_large</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="154" /><span class="True">     154:</span> <span class="f">{</span>
<a name="155" /><span class="True">     155:</span>     <span class="m">return</span> <span class="b">pmd_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFNFXzA_"><span class="b">_PAGE_PSE</span></a><span class="f">;</span>
<a name="156" /><span class="True">     156:</span> <span class="f">}</span>
<a name="157" /><span class="True">     157:</span> 
<a name="158" /><span class="False">     158:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_TRANSPARENT_HUGEPAGE</span>
<a name="159" /><span class="False">     159:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pmd_trans_splitting</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="160" /><span class="False">     160:</span> <span class="f">{</span>
<a name="161" /><span class="False">     161:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_cG1kX3ZhbF8w"><span class="b">pmd_val</span></a><span class="f">(</span><span class="b">pmd</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_noref.html#_X1BBR0VfU1BMSVRUSU5HXzA_"><span class="b">_PAGE_SPLITTING</span></a><span class="f">;</span>
<a name="162" /><span class="False">     162:</span> <span class="f">}</span>
<a name="163" /><span class="False">     163:</span> 
<a name="164" /><span class="False">     164:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pmd_trans_huge</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="165" /><span class="False">     165:</span> <span class="f">{</span>
<a name="166" /><span class="False">     166:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_cG1kX3ZhbF8w"><span class="b">pmd_val</span></a><span class="f">(</span><span class="b">pmd</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFNFXzA_"><span class="b">_PAGE_PSE</span></a><span class="f">;</span>
<a name="167" /><span class="False">     167:</span> <span class="f">}</span>
<a name="168" /><span class="False">     168:</span> 
<a name="169" /><span class="False">     169:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">has_transparent_hugepage</span><span class="f">(</span><span class="m">void</span><span class="f">)</span>
<a name="170" /><span class="False">     170:</span> <span class="f">{</span>
<a name="171" /><span class="False">     171:</span>     <span class="m">return</span> <a href="cpu.c_macros_noref.html#_Y3B1X2hhc19wc2VfMA__"><span class="b">cpu_has_pse</span></a><span class="f">;</span>
<a name="172" /><span class="False">     172:</span> <span class="f">}</span>
<a name="173" /><span class="True">     173:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* CONFIG_TRANSPARENT_HUGEPAGE */</span>
<a name="174" /><span class="True">     174:</span> 
<a name="175" /><span class="True">     175:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_set_flags</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">,</span> <span class="b">pteval_t</span> <span class="b">set</span><span class="f">)</span>
<a name="176" /><span class="True">     176:</span> <span class="f">{</span>
<a name="177" /><span class="True">     177:</span>     <span class="b">pteval_t</span> <span class="b">v</span> <span class="f">=</span> <span class="b">native_pte_val</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span><span class="f">;</span>
<a name="178" /><span class="True">     178:</span> 
<a name="179" /><span class="True">     179:</span>     <span class="m">return</span> <span class="b">native_make_pte</span><span class="f">(</span><span class="b">v</span> <span class="f">|</span> <span class="b">set</span><span class="f">)</span><span class="f">;</span>
<a name="180" /><span class="True">     180:</span> <span class="f">}</span>
<a name="181" /><span class="True">     181:</span> 
<a name="182" /><span class="True">     182:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_clear_flags</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">,</span> <span class="b">pteval_t</span> <span class="b">clear</span><span class="f">)</span>
<a name="183" /><span class="True">     183:</span> <span class="f">{</span>
<a name="184" /><span class="True">     184:</span>     <span class="b">pteval_t</span> <span class="b">v</span> <span class="f">=</span> <span class="b">native_pte_val</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span><span class="f">;</span>
<a name="185" /><span class="True">     185:</span> 
<a name="186" /><span class="True">     186:</span>     <span class="m">return</span> <span class="b">native_make_pte</span><span class="f">(</span><span class="b">v</span> <span class="f">&amp;</span> <span class="f">~</span><span class="b">clear</span><span class="f">)</span><span class="f">;</span>
<a name="187" /><span class="True">     187:</span> <span class="f">}</span>
<a name="188" /><span class="True">     188:</span> 
<a name="189" /><span class="True">     189:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_mkclean</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="190" /><span class="True">     190:</span> <span class="f">{</span>
<a name="191" /><span class="True">     191:</span>     <span class="m">return</span> <span class="b">pte_clear_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfRElSVFlfMA__"><span class="b">_PAGE_DIRTY</span></a><span class="f">)</span><span class="f">;</span>
<a name="192" /><span class="True">     192:</span> <span class="f">}</span>
<a name="193" /><span class="True">     193:</span> 
<a name="194" /><span class="True">     194:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_mkold</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="195" /><span class="True">     195:</span> <span class="f">{</span>
<a name="196" /><span class="True">     196:</span>     <span class="m">return</span> <span class="b">pte_clear_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfQUNDRVNTRURfMA__"><span class="b">_PAGE_ACCESSED</span></a><span class="f">)</span><span class="f">;</span>
<a name="197" /><span class="True">     197:</span> <span class="f">}</span>
<a name="198" /><span class="True">     198:</span> 
<a name="199" /><span class="True">     199:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_wrprotect</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="200" /><span class="True">     200:</span> <span class="f">{</span>
<a name="201" /><span class="True">     201:</span>     <span class="m">return</span> <span class="b">pte_clear_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUldfMA__"><span class="b">_PAGE_RW</span></a><span class="f">)</span><span class="f">;</span>
<a name="202" /><span class="True">     202:</span> <span class="f">}</span>
<a name="203" /><span class="True">     203:</span> 
<a name="204" /><span class="True">     204:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_mkexec</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="205" /><span class="True">     205:</span> <span class="f">{</span>
<a name="206" /><span class="True">     206:</span>     <span class="m">return</span> <span class="b">pte_clear_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfTlhfMA__"><span class="b">_PAGE_NX</span></a><span class="f">)</span><span class="f">;</span>
<a name="207" /><span class="True">     207:</span> <span class="f">}</span>
<a name="208" /><span class="True">     208:</span> 
<a name="209" /><span class="True">     209:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_mkdirty</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="210" /><span class="True">     210:</span> <span class="f">{</span>
<a name="211" /><span class="True">     211:</span>     <span class="m">return</span> <span class="b">pte_set_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfRElSVFlfMA__"><span class="b">_PAGE_DIRTY</span></a> <span class="f">|</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU09GVF9ESVJUWV8w"><span class="b">_PAGE_SOFT_DIRTY</span></a><span class="f">)</span><span class="f">;</span>
<a name="212" /><span class="True">     212:</span> <span class="f">}</span>
<a name="213" /><span class="True">     213:</span> 
<a name="214" /><span class="True">     214:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_mkyoung</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="215" /><span class="True">     215:</span> <span class="f">{</span>
<a name="216" /><span class="True">     216:</span>     <span class="m">return</span> <span class="b">pte_set_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfQUNDRVNTRURfMA__"><span class="b">_PAGE_ACCESSED</span></a><span class="f">)</span><span class="f">;</span>
<a name="217" /><span class="True">     217:</span> <span class="f">}</span>
<a name="218" /><span class="True">     218:</span> 
<a name="219" /><span class="True">     219:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_mkwrite</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="220" /><span class="True">     220:</span> <span class="f">{</span>
<a name="221" /><span class="True">     221:</span>     <span class="m">return</span> <span class="b">pte_set_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUldfMA__"><span class="b">_PAGE_RW</span></a><span class="f">)</span><span class="f">;</span>
<a name="222" /><span class="True">     222:</span> <span class="f">}</span>
<a name="223" /><span class="True">     223:</span> 
<a name="224" /><span class="True">     224:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_mkhuge</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="225" /><span class="True">     225:</span> <span class="f">{</span>
<a name="226" /><span class="True">     226:</span>     <span class="m">return</span> <span class="b">pte_set_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFNFXzA_"><span class="b">_PAGE_PSE</span></a><span class="f">)</span><span class="f">;</span>
<a name="227" /><span class="True">     227:</span> <span class="f">}</span>
<a name="228" /><span class="True">     228:</span> 
<a name="229" /><span class="True">     229:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_clrhuge</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="230" /><span class="True">     230:</span> <span class="f">{</span>
<a name="231" /><span class="True">     231:</span>     <span class="m">return</span> <span class="b">pte_clear_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFNFXzA_"><span class="b">_PAGE_PSE</span></a><span class="f">)</span><span class="f">;</span>
<a name="232" /><span class="True">     232:</span> <span class="f">}</span>
<a name="233" /><span class="True">     233:</span> 
<a name="234" /><span class="True">     234:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_mkglobal</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="235" /><span class="True">     235:</span> <span class="f">{</span>
<a name="236" /><span class="True">     236:</span>     <span class="m">return</span> <span class="b">pte_set_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfR0xPQkFMXzA_"><span class="b">_PAGE_GLOBAL</span></a><span class="f">)</span><span class="f">;</span>
<a name="237" /><span class="True">     237:</span> <span class="f">}</span>
<a name="238" /><span class="True">     238:</span> 
<a name="239" /><span class="True">     239:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_clrglobal</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="240" /><span class="True">     240:</span> <span class="f">{</span>
<a name="241" /><span class="True">     241:</span>     <span class="m">return</span> <span class="b">pte_clear_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfR0xPQkFMXzA_"><span class="b">_PAGE_GLOBAL</span></a><span class="f">)</span><span class="f">;</span>
<a name="242" /><span class="True">     242:</span> <span class="f">}</span>
<a name="243" /><span class="True">     243:</span> 
<a name="244" /><span class="True">     244:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_mkspecial</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="245" /><span class="True">     245:</span> <span class="f">{</span>
<a name="246" /><span class="True">     246:</span>     <span class="m">return</span> <span class="b">pte_set_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU1BFQ0lBTF8w"><span class="b">_PAGE_SPECIAL</span></a><span class="f">)</span><span class="f">;</span>
<a name="247" /><span class="True">     247:</span> <span class="f">}</span>
<a name="248" /><span class="True">     248:</span> 
<a name="249" /><span class="True">     249:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">pmd_set_flags</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">,</span> <span class="b">pmdval_t</span> <span class="b">set</span><span class="f">)</span>
<a name="250" /><span class="True">     250:</span> <span class="f">{</span>
<a name="251" /><span class="True">     251:</span>     <span class="b">pmdval_t</span> <span class="b">v</span> <span class="f">=</span> <span class="b">native_pmd_val</span><span class="f">(</span><span class="b">pmd</span><span class="f">)</span><span class="f">;</span>
<a name="252" /><span class="True">     252:</span> 
<a name="253" /><span class="True">     253:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_X19wbWRfMA__"><span class="b">__pmd</span></a><span class="f">(</span><span class="b">v</span> <span class="f">|</span> <span class="b">set</span><span class="f">)</span><span class="f">;</span>
<a name="254" /><span class="True">     254:</span> <span class="f">}</span>
<a name="255" /><span class="True">     255:</span> 
<a name="256" /><span class="True">     256:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">pmd_clear_flags</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">,</span> <span class="b">pmdval_t</span> <span class="b">clear</span><span class="f">)</span>
<a name="257" /><span class="True">     257:</span> <span class="f">{</span>
<a name="258" /><span class="True">     258:</span>     <span class="b">pmdval_t</span> <span class="b">v</span> <span class="f">=</span> <span class="b">native_pmd_val</span><span class="f">(</span><span class="b">pmd</span><span class="f">)</span><span class="f">;</span>
<a name="259" /><span class="True">     259:</span> 
<a name="260" /><span class="True">     260:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_X19wbWRfMA__"><span class="b">__pmd</span></a><span class="f">(</span><span class="b">v</span> <span class="f">&amp;</span> <span class="f">~</span><span class="b">clear</span><span class="f">)</span><span class="f">;</span>
<a name="261" /><span class="True">     261:</span> <span class="f">}</span>
<a name="262" /><span class="True">     262:</span> 
<a name="263" /><span class="True">     263:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">pmd_mkold</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="264" /><span class="True">     264:</span> <span class="f">{</span>
<a name="265" /><span class="True">     265:</span>     <span class="m">return</span> <span class="b">pmd_clear_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfQUNDRVNTRURfMA__"><span class="b">_PAGE_ACCESSED</span></a><span class="f">)</span><span class="f">;</span>
<a name="266" /><span class="True">     266:</span> <span class="f">}</span>
<a name="267" /><span class="True">     267:</span> 
<a name="268" /><span class="True">     268:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">pmd_wrprotect</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="269" /><span class="True">     269:</span> <span class="f">{</span>
<a name="270" /><span class="True">     270:</span>     <span class="m">return</span> <span class="b">pmd_clear_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUldfMA__"><span class="b">_PAGE_RW</span></a><span class="f">)</span><span class="f">;</span>
<a name="271" /><span class="True">     271:</span> <span class="f">}</span>
<a name="272" /><span class="True">     272:</span> 
<a name="273" /><span class="True">     273:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">pmd_mkdirty</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="274" /><span class="True">     274:</span> <span class="f">{</span>
<a name="275" /><span class="True">     275:</span>     <span class="m">return</span> <span class="b">pmd_set_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfRElSVFlfMA__"><span class="b">_PAGE_DIRTY</span></a> <span class="f">|</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU09GVF9ESVJUWV8w"><span class="b">_PAGE_SOFT_DIRTY</span></a><span class="f">)</span><span class="f">;</span>
<a name="276" /><span class="True">     276:</span> <span class="f">}</span>
<a name="277" /><span class="True">     277:</span> 
<a name="278" /><span class="True">     278:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">pmd_mkhuge</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="279" /><span class="True">     279:</span> <span class="f">{</span>
<a name="280" /><span class="True">     280:</span>     <span class="m">return</span> <span class="b">pmd_set_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFNFXzA_"><span class="b">_PAGE_PSE</span></a><span class="f">)</span><span class="f">;</span>
<a name="281" /><span class="True">     281:</span> <span class="f">}</span>
<a name="282" /><span class="True">     282:</span> 
<a name="283" /><span class="True">     283:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">pmd_mkyoung</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="284" /><span class="True">     284:</span> <span class="f">{</span>
<a name="285" /><span class="True">     285:</span>     <span class="m">return</span> <span class="b">pmd_set_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfQUNDRVNTRURfMA__"><span class="b">_PAGE_ACCESSED</span></a><span class="f">)</span><span class="f">;</span>
<a name="286" /><span class="True">     286:</span> <span class="f">}</span>
<a name="287" /><span class="True">     287:</span> 
<a name="288" /><span class="True">     288:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">pmd_mkwrite</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="289" /><span class="True">     289:</span> <span class="f">{</span>
<a name="290" /><span class="True">     290:</span>     <span class="m">return</span> <span class="b">pmd_set_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUldfMA__"><span class="b">_PAGE_RW</span></a><span class="f">)</span><span class="f">;</span>
<a name="291" /><span class="True">     291:</span> <span class="f">}</span>
<a name="292" /><span class="True">     292:</span> 
<a name="293" /><span class="True">     293:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">pmd_mknotpresent</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="294" /><span class="True">     294:</span> <span class="f">{</span>
<a name="295" /><span class="True">     295:</span>     <span class="m">return</span> <span class="b">pmd_clear_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFJFU0VOVF8w"><span class="b">_PAGE_PRESENT</span></a><span class="f">)</span><span class="f">;</span>
<a name="296" /><span class="True">     296:</span> <span class="f">}</span>
<a name="297" /><span class="True">     297:</span> 
<a name="298" /><span class="True">     298:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_soft_dirty</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="299" /><span class="True">     299:</span> <span class="f">{</span>
<a name="300" /><span class="True">     300:</span>     <span class="m">return</span> <span class="b">pte_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU09GVF9ESVJUWV8w"><span class="b">_PAGE_SOFT_DIRTY</span></a><span class="f">;</span>
<a name="301" /><span class="True">     301:</span> <span class="f">}</span>
<a name="302" /><span class="True">     302:</span> 
<a name="303" /><span class="True">     303:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pmd_soft_dirty</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="304" /><span class="True">     304:</span> <span class="f">{</span>
<a name="305" /><span class="True">     305:</span>     <span class="m">return</span> <span class="b">pmd_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU09GVF9ESVJUWV8w"><span class="b">_PAGE_SOFT_DIRTY</span></a><span class="f">;</span>
<a name="306" /><span class="True">     306:</span> <span class="f">}</span>
<a name="307" /><span class="True">     307:</span> 
<a name="308" /><span class="True">     308:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_mksoft_dirty</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="309" /><span class="True">     309:</span> <span class="f">{</span>
<a name="310" /><span class="True">     310:</span>     <span class="m">return</span> <span class="b">pte_set_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU09GVF9ESVJUWV8w"><span class="b">_PAGE_SOFT_DIRTY</span></a><span class="f">)</span><span class="f">;</span>
<a name="311" /><span class="True">     311:</span> <span class="f">}</span>
<a name="312" /><span class="True">     312:</span> 
<a name="313" /><span class="True">     313:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">pmd_mksoft_dirty</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="314" /><span class="True">     314:</span> <span class="f">{</span>
<a name="315" /><span class="True">     315:</span>     <span class="m">return</span> <span class="b">pmd_set_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU09GVF9ESVJUWV8w"><span class="b">_PAGE_SOFT_DIRTY</span></a><span class="f">)</span><span class="f">;</span>
<a name="316" /><span class="True">     316:</span> <span class="f">}</span>
<a name="317" /><span class="True">     317:</span> 
<a name="318" /><span class="True">     318:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_file_clear_soft_dirty</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="319" /><span class="True">     319:</span> <span class="f">{</span>
<a name="320" /><span class="True">     320:</span>     <span class="m">return</span> <span class="b">pte_clear_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU09GVF9ESVJUWV8w"><span class="b">_PAGE_SOFT_DIRTY</span></a><span class="f">)</span><span class="f">;</span>
<a name="321" /><span class="True">     321:</span> <span class="f">}</span>
<a name="322" /><span class="True">     322:</span> 
<a name="323" /><span class="True">     323:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_file_mksoft_dirty</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="324" /><span class="True">     324:</span> <span class="f">{</span>
<a name="325" /><span class="True">     325:</span>     <span class="m">return</span> <span class="b">pte_set_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU09GVF9ESVJUWV8w"><span class="b">_PAGE_SOFT_DIRTY</span></a><span class="f">)</span><span class="f">;</span>
<a name="326" /><span class="True">     326:</span> <span class="f">}</span>
<a name="327" /><span class="True">     327:</span> 
<a name="328" /><span class="True">     328:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_file_soft_dirty</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="329" /><span class="True">     329:</span> <span class="f">{</span>
<a name="330" /><span class="True">     330:</span>     <span class="m">return</span> <span class="b">pte_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU09GVF9ESVJUWV8w"><span class="b">_PAGE_SOFT_DIRTY</span></a><span class="f">;</span>
<a name="331" /><span class="True">     331:</span> <span class="f">}</span>
<a name="332" /><span class="True">     332:</span> 
<a name="333" /><span class="True">     333:</span> <span class="k">/*</span>
<a name="334" /><span class="True">     334:</span> <span class="k"> * Mask out unsupported bits in a present pgprot.  Non-present pgprots</span>
<a name="335" /><span class="True">     335:</span> <span class="k"> * can use those bits for other purposes, so leave them be.</span>
<a name="336" /><span class="True">     336:</span> <span class="k"> */</span>
<a name="337" /><span class="True">     337:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pgprotval_t</span> <span class="b">massage_pgprot</span><span class="f">(</span><span class="b">pgprot_t</span> <span class="b">pgprot</span><span class="f">)</span>
<a name="338" /><span class="True">     338:</span> <span class="f">{</span>
<a name="339" /><span class="True">     339:</span>     <span class="b">pgprotval_t</span> <span class="b">protval</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_cGdwcm90X3ZhbF8w"><span class="b">pgprot_val</span></a><span class="f">(</span><span class="b">pgprot</span><span class="f">)</span><span class="f">;</span>
<a name="340" /><span class="True">     340:</span> 
<a name="341" /><span class="True">     341:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">protval</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFJFU0VOVF8w"><span class="b">_PAGE_PRESENT</span></a><span class="f">)</span>
<a name="342" /><span class="True">     342:</span>         <span class="b">protval</span> <span class="f">&amp;=</span> <span class="b">__supported_pte_mask</span><span class="f">;</span>
<a name="343" /><span class="True">     343:</span> 
<a name="344" /><span class="True">     344:</span>     <span class="m">return</span> <span class="b">protval</span><span class="f">;</span>
<a name="345" /><span class="True">     345:</span> <span class="f">}</span>
<a name="346" /><span class="True">     346:</span> 
<a name="347" /><span class="True">     347:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pfn_pte</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">page_nr</span><span class="f">,</span> <span class="b">pgprot_t</span> <span class="b">pgprot</span><span class="f">)</span>
<a name="348" /><span class="True">     348:</span> <span class="f">{</span>
<a name="349" /><span class="True">     349:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_X19wdGVfMA__"><span class="b">__pte</span></a><span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">phys_addr_t</span><span class="f">)</span><span class="b">page_nr</span> <span class="f">&lt;&lt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span> <span class="f">|</span>
<a name="350" /><span class="True">     350:</span>              <span class="b">massage_pgprot</span><span class="f">(</span><span class="b">pgprot</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="351" /><span class="True">     351:</span> <span class="f">}</span>
<a name="352" /><span class="True">     352:</span> 
<a name="353" /><span class="True">     353:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">pfn_pmd</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">page_nr</span><span class="f">,</span> <span class="b">pgprot_t</span> <span class="b">pgprot</span><span class="f">)</span>
<a name="354" /><span class="True">     354:</span> <span class="f">{</span>
<a name="355" /><span class="True">     355:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_X19wbWRfMA__"><span class="b">__pmd</span></a><span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">phys_addr_t</span><span class="f">)</span><span class="b">page_nr</span> <span class="f">&lt;&lt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span> <span class="f">|</span>
<a name="356" /><span class="True">     356:</span>              <span class="b">massage_pgprot</span><span class="f">(</span><span class="b">pgprot</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="357" /><span class="True">     357:</span> <span class="f">}</span>
<a name="358" /><span class="True">     358:</span> 
<a name="359" /><span class="True">     359:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_modify</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">,</span> <span class="b">pgprot_t</span> <span class="b">newprot</span><span class="f">)</span>
<a name="360" /><span class="True">     360:</span> <span class="f">{</span>
<a name="361" /><span class="True">     361:</span>     <span class="b">pteval_t</span> <span class="b">val</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_cHRlX3ZhbF8w"><span class="b">pte_val</span></a><span class="f">(</span><span class="b">pte</span><span class="f">)</span><span class="f">;</span>
<a name="362" /><span class="True">     362:</span> 
<a name="363" /><span class="True">     363:</span>     <span class="k">/*</span>
<a name="364" /><span class="True">     364:</span> <span class="k">     * Chop off the NX bit (if present), and add the NX portion of</span>
<a name="365" /><span class="True">     365:</span> <span class="k">     * the newprot (if present):</span>
<a name="366" /><span class="True">     366:</span> <span class="k">     */</span>
<a name="367" /><span class="True">     367:</span>     <span class="b">val</span> <span class="f">&amp;=</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfQ0hHX01BU0tfMA__"><span class="b">_PAGE_CHG_MASK</span></a><span class="f">;</span>
<a name="368" /><span class="True">     368:</span>     <span class="b">val</span> <span class="f">|=</span> <span class="b">massage_pgprot</span><span class="f">(</span><span class="b">newprot</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">~</span><a href="cpu.c_macros_ref.html#_X1BBR0VfQ0hHX01BU0tfMA__"><span class="b">_PAGE_CHG_MASK</span></a><span class="f">;</span>
<a name="369" /><span class="True">     369:</span> 
<a name="370" /><span class="True">     370:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_X19wdGVfMA__"><span class="b">__pte</span></a><span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">;</span>
<a name="371" /><span class="True">     371:</span> <span class="f">}</span>
<a name="372" /><span class="True">     372:</span> 
<a name="373" /><span class="True">     373:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">pmd_modify</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">,</span> <span class="b">pgprot_t</span> <span class="b">newprot</span><span class="f">)</span>
<a name="374" /><span class="True">     374:</span> <span class="f">{</span>
<a name="375" /><span class="True">     375:</span>     <span class="b">pmdval_t</span> <span class="b">val</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_cG1kX3ZhbF8w"><span class="b">pmd_val</span></a><span class="f">(</span><span class="b">pmd</span><span class="f">)</span><span class="f">;</span>
<a name="376" /><span class="True">     376:</span> 
<a name="377" /><span class="True">     377:</span>     <span class="b">val</span> <span class="f">&amp;=</span> <a href="cpu.c_macros_ref.html#_X0hQQUdFX0NIR19NQVNLXzA_"><span class="b">_HPAGE_CHG_MASK</span></a><span class="f">;</span>
<a name="378" /><span class="True">     378:</span>     <span class="b">val</span> <span class="f">|=</span> <span class="b">massage_pgprot</span><span class="f">(</span><span class="b">newprot</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">~</span><a href="cpu.c_macros_ref.html#_X0hQQUdFX0NIR19NQVNLXzA_"><span class="b">_HPAGE_CHG_MASK</span></a><span class="f">;</span>
<a name="379" /><span class="True">     379:</span> 
<a name="380" /><span class="True">     380:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_X19wbWRfMA__"><span class="b">__pmd</span></a><span class="f">(</span><span class="b">val</span><span class="f">)</span><span class="f">;</span>
<a name="381" /><span class="True">     381:</span> <span class="f">}</span>
<a name="382" /><span class="True">     382:</span> 
<a name="383" /><span class="True">     383:</span> <span class="k">/* mprotect needs to preserve PAT bits when updating vm_page_prot */</span>
<a name="384" /><span class="True">     384:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cGdwcm90X21vZGlmeV8w"><span class="b">pgprot_modify</span></a> <a href="cpu.c_macros_ref.html#_cGdwcm90X21vZGlmeV8w"><span class="b">pgprot_modify</span></a>
<a name="385" /><span class="True">     385:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pgprot_t</span> <a href="cpu.c_macros_ref.html#_cGdwcm90X21vZGlmeV8w"><span class="b">pgprot_modify</span></a><span class="f">(</span><span class="b">pgprot_t</span> <span class="b">oldprot</span><span class="f">,</span> <span class="b">pgprot_t</span> <span class="b">newprot</span><span class="f">)</span>
<a name="386" /><span class="True">     386:</span> <span class="f">{</span>
<a name="387" /><span class="True">     387:</span>     <span class="b">pgprotval_t</span> <span class="b">preservebits</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_cGdwcm90X3ZhbF8w"><span class="b">pgprot_val</span></a><span class="f">(</span><span class="b">oldprot</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfQ0hHX01BU0tfMA__"><span class="b">_PAGE_CHG_MASK</span></a><span class="f">;</span>
<a name="388" /><span class="True">     388:</span>     <span class="b">pgprotval_t</span> <span class="b">addbits</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_cGdwcm90X3ZhbF8w"><span class="b">pgprot_val</span></a><span class="f">(</span><span class="b">newprot</span><span class="f">)</span><span class="f">;</span>
<a name="389" /><span class="True">     389:</span>     <span class="m">return</span> <a href="cpu.c_macros_ref.html#_X19wZ3Byb3RfMA__"><span class="b">__pgprot</span></a><span class="f">(</span><span class="b">preservebits</span> <span class="f">|</span> <span class="b">addbits</span><span class="f">)</span><span class="f">;</span>
<a name="390" /><span class="True">     390:</span> <span class="f">}</span>
<a name="391" /><span class="True">     391:</span> 
<a name="392" /><span class="True">     392:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cHRlX3BncHJvdF8w"><span class="b">pte_pgprot</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_X19wZ3Byb3RfMA__"><span class="b">__pgprot</span></a><span class="f">(</span><span class="b">pte_flags</span><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_UFRFX0ZMQUdTX01BU0tfMA__"><span class="b">PTE_FLAGS_MASK</span></a><span class="f">)</span>
<a name="393" /><span class="True">     393:</span> 
<a name="394" /><span class="True">     394:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Y2Fub25fcGdwcm90XzA_"><span class="b">canon_pgprot</span></a><span class="f">(</span><span class="b">p</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_X19wZ3Byb3RfMA__"><span class="b">__pgprot</span></a><span class="f">(</span><span class="b">massage_pgprot</span><span class="f">(</span><span class="b">p</span><span class="f">)</span><span class="f">)</span>
<a name="395" /><span class="True">     395:</span> 
<a name="396" /><span class="True">     396:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">is_new_memtype_allowed</span><span class="f">(</span><span class="b">u64</span> <span class="b">paddr</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">size</span><span class="f">,</span>
<a name="397" /><span class="True">     397:</span>                      <span class="m">unsigned</span> <span class="m">long</span> <span class="b">flags</span><span class="f">,</span>
<a name="398" /><span class="True">     398:</span>                      <span class="m">unsigned</span> <span class="m">long</span> <span class="b">new_flags</span><span class="f">)</span>
<a name="399" /><span class="True">     399:</span> <span class="f">{</span>
<a name="400" /><span class="True">     400:</span>     <span class="k">/*</span>
<a name="401" /><span class="True">     401:</span> <span class="k">     * PAT type is always WB for untracked ranges, so no need to check.</span>
<a name="402" /><span class="True">     402:</span> <span class="k">     */</span>
<a name="403" /><span class="True">     403:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">x86_platform</span><span class="f">.</span><span class="b">is_untracked_pat_range</span><span class="f">(</span><span class="b">paddr</span><span class="f">,</span> <span class="b">paddr</span> <span class="f">+</span> <span class="b">size</span><span class="f">)</span><span class="f">)</span>
<a name="404" /><span class="True">     404:</span>         <span class="m">return</span> <span class="c">1</span><span class="f">;</span>
<a name="405" /><span class="True">     405:</span> 
<a name="406" /><span class="True">     406:</span>     <span class="k">/*</span>
<a name="407" /><span class="True">     407:</span> <span class="k">     * Certain new memtypes are not allowed with certain</span>
<a name="408" /><span class="True">     408:</span> <span class="k">     * requested memtype:</span>
<a name="409" /><span class="True">     409:</span> <span class="k">     * - request is uncached, return cannot be write-back</span>
<a name="410" /><span class="True">     410:</span> <span class="k">     * - request is write-combine, return cannot be write-back</span>
<a name="411" /><span class="True">     411:</span> <span class="k">     */</span>
<a name="412" /><span class="True">     412:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">(</span><span class="b">flags</span> <span class="f">==</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfQ0FDSEVfVUNfTUlOVVNfMA__"><span class="b">_PAGE_CACHE_UC_MINUS</span></a> <span class="f">&amp;&amp;</span>
<a name="413" /><span class="True">     413:</span>          <span class="b">new_flags</span> <span class="f">==</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfQ0FDSEVfV0JfMA__"><span class="b">_PAGE_CACHE_WB</span></a><span class="f">)</span> <span class="f">||</span>
<a name="414" /><span class="True">     414:</span>         <span class="f">(</span><span class="b">flags</span> <span class="f">==</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfQ0FDSEVfV0NfMA__"><span class="b">_PAGE_CACHE_WC</span></a> <span class="f">&amp;&amp;</span>
<a name="415" /><span class="True">     415:</span>          <span class="b">new_flags</span> <span class="f">==</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfQ0FDSEVfV0JfMA__"><span class="b">_PAGE_CACHE_WB</span></a><span class="f">)</span><span class="f">)</span> <span class="f">{</span>
<a name="416" /><span class="True">     416:</span>         <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="417" /><span class="True">     417:</span>     <span class="f">}</span>
<a name="418" /><span class="True">     418:</span> 
<a name="419" /><span class="True">     419:</span>     <span class="m">return</span> <span class="c">1</span><span class="f">;</span>
<a name="420" /><span class="True">     420:</span> <span class="f">}</span>
<a name="421" /><span class="True">     421:</span> 
<a name="422" /><span class="True">     422:</span> <span class="b">pmd_t</span> <span class="f">*</span><span class="b">populate_extra_pmd</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">vaddr</span><span class="f">)</span><span class="f">;</span>
<a name="423" /><span class="True">     423:</span> <span class="b">pte_t</span> <span class="f">*</span><span class="b">populate_extra_pte</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">vaddr</span><span class="f">)</span><span class="f">;</span>
<a name="424" /><span class="True">     424:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* __ASSEMBLY__ */</span>
<a name="425" /><span class="True">     425:</span> 
<a name="426" /><span class="False">     426:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_X86_32</span>
<a name="427" /><span class="False">     427:</span> <span class="f">#</span> <span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">pgtable_32</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="428" /><span class="True">     428:</span> <span class="f">#</span><span class="n">else</span>
<a name="429" /><span class="True">     429:</span> <span class="f">#</span> <span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">/</span><span class="b">pgtable_64</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="430" /><span class="True">     430:</span> <span class="f">#</span><span class="n">endif</span>
<a name="431" /><span class="True">     431:</span> 
<a name="432" /><span class="True">     432:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__ASSEMBLY__</span>
<a name="433" /><span class="True">     433:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">mm_types</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="434" /><span class="True">     434:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">mmdebug</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="435" /><span class="True">     435:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">log2</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="436" /><span class="True">     436:</span> 
<a name="437" /><span class="True">     437:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_none</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="438" /><span class="True">     438:</span> <span class="f">{</span>
<a name="439" /><span class="True">     439:</span>     <span class="m">return</span> <span class="f">!</span><span class="b">pte</span><span class="f">.</span><span class="b">pte</span><span class="f">;</span>
<a name="440" /><span class="True">     440:</span> <span class="f">}</span>
<a name="441" /><span class="True">     441:</span> 
<a name="442" /><span class="True">     442:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUFRFX1NBTUVfMA__"><span class="b">__HAVE_ARCH_PTE_SAME</span></a>
<a name="443" /><span class="True">     443:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_same</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">a</span><span class="f">,</span> <span class="b">pte_t</span> <span class="b">b</span><span class="f">)</span>
<a name="444" /><span class="True">     444:</span> <span class="f">{</span>
<a name="445" /><span class="True">     445:</span>     <span class="m">return</span> <span class="b">a</span><span class="f">.</span><span class="b">pte</span> <span class="f">==</span> <span class="b">b</span><span class="f">.</span><span class="b">pte</span><span class="f">;</span>
<a name="446" /><span class="True">     446:</span> <span class="f">}</span>
<a name="447" /><span class="True">     447:</span> 
<a name="448" /><span class="True">     448:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_present</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">a</span><span class="f">)</span>
<a name="449" /><span class="True">     449:</span> <span class="f">{</span>
<a name="450" /><span class="True">     450:</span>     <span class="m">return</span> <span class="b">pte_flags</span><span class="f">(</span><span class="b">a</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_X1BBR0VfUFJFU0VOVF8w"><span class="b">_PAGE_PRESENT</span></a> <span class="f">|</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFJPVE5PTkVfMA__"><span class="b">_PAGE_PROTNONE</span></a> <span class="f">|</span>
<a name="451" /><span class="True">     451:</span>                    <a href="cpu.c_macros_ref.html#_X1BBR0VfTlVNQV8w"><span class="b">_PAGE_NUMA</span></a><span class="f">)</span><span class="f">;</span>
<a name="452" /><span class="True">     452:</span> <span class="f">}</span>
<a name="453" /><span class="True">     453:</span> 
<a name="454" /><span class="True">     454:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cHRlX2FjY2Vzc2libGVfMA__"><span class="b">pte_accessible</span></a> <a href="cpu.c_macros_ref.html#_cHRlX2FjY2Vzc2libGVfMA__"><span class="b">pte_accessible</span></a>
<a name="455" /><span class="True">     455:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">bool</span> <a href="cpu.c_macros_ref.html#_cHRlX2FjY2Vzc2libGVfMA__"><span class="b">pte_accessible</span></a><span class="f">(</span><span class="m">struct</span> <span class="b">mm_struct</span> <span class="f">*</span><span class="b">mm</span><span class="f">,</span> <span class="b">pte_t</span> <span class="b">a</span><span class="f">)</span>
<a name="456" /><span class="True">     456:</span> <span class="f">{</span>
<a name="457" /><span class="True">     457:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">pte_flags</span><span class="f">(</span><span class="b">a</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFJFU0VOVF8w"><span class="b">_PAGE_PRESENT</span></a><span class="f">)</span>
<a name="458" /><span class="True">     458:</span>         <span class="m">return</span> <span class="m">true</span><span class="f">;</span>
<a name="459" /><span class="True">     459:</span> 
<a name="460" /><span class="True">     460:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">(</span><span class="b">pte_flags</span><span class="f">(</span><span class="b">a</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_X1BBR0VfUFJPVE5PTkVfMA__"><span class="b">_PAGE_PROTNONE</span></a> <span class="f">|</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfTlVNQV8w"><span class="b">_PAGE_NUMA</span></a><span class="f">)</span><span class="f">)</span> <span class="f">&amp;&amp;</span>
<a name="461" /><span class="True">     461:</span>             <span class="b">mm_tlb_flush_pending</span><span class="f">(</span><span class="b">mm</span><span class="f">)</span><span class="f">)</span>
<a name="462" /><span class="True">     462:</span>         <span class="m">return</span> <span class="m">true</span><span class="f">;</span>
<a name="463" /><span class="True">     463:</span> 
<a name="464" /><span class="True">     464:</span>     <span class="m">return</span> <span class="m">false</span><span class="f">;</span>
<a name="465" /><span class="True">     465:</span> <span class="f">}</span>
<a name="466" /><span class="True">     466:</span> 
<a name="467" /><span class="True">     467:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_hidden</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="468" /><span class="True">     468:</span> <span class="f">{</span>
<a name="469" /><span class="True">     469:</span>     <span class="m">return</span> <span class="b">pte_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfSElEREVOXzA_"><span class="b">_PAGE_HIDDEN</span></a><span class="f">;</span>
<a name="470" /><span class="True">     470:</span> <span class="f">}</span>
<a name="471" /><span class="True">     471:</span> 
<a name="472" /><span class="True">     472:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pmd_present</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="473" /><span class="True">     473:</span> <span class="f">{</span>
<a name="474" /><span class="True">     474:</span>     <span class="k">/*</span>
<a name="475" /><span class="True">     475:</span> <span class="k">     * Checking for _PAGE_PSE is needed too because</span>
<a name="476" /><span class="True">     476:</span> <span class="k">     * split_huge_page will temporarily clear the present bit (but</span>
<a name="477" /><span class="True">     477:</span> <span class="k">     * the _PAGE_PSE flag will remain set at all times while the</span>
<a name="478" /><span class="True">     478:</span> <span class="k">     * _PAGE_PRESENT bit is clear).</span>
<a name="479" /><span class="True">     479:</span> <span class="k">     */</span>
<a name="480" /><span class="True">     480:</span>     <span class="m">return</span> <span class="b">pmd_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_X1BBR0VfUFJFU0VOVF8w"><span class="b">_PAGE_PRESENT</span></a> <span class="f">|</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFJPVE5PTkVfMA__"><span class="b">_PAGE_PROTNONE</span></a> <span class="f">|</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFNFXzA_"><span class="b">_PAGE_PSE</span></a> <span class="f">|</span>
<a name="481" /><span class="True">     481:</span>                  <a href="cpu.c_macros_ref.html#_X1BBR0VfTlVNQV8w"><span class="b">_PAGE_NUMA</span></a><span class="f">)</span><span class="f">;</span>
<a name="482" /><span class="True">     482:</span> <span class="f">}</span>
<a name="483" /><span class="True">     483:</span> 
<a name="484" /><span class="True">     484:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pmd_none</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="485" /><span class="True">     485:</span> <span class="f">{</span>
<a name="486" /><span class="True">     486:</span>     <span class="k">/* Only check low word on 32-bit platforms, since it might be</span>
<a name="487" /><span class="True">     487:</span> <span class="k">       out of sync with upper half. */</span>
<a name="488" /><span class="True">     488:</span>     <span class="m">return</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="b">native_pmd_val</span><span class="f">(</span><span class="b">pmd</span><span class="f">)</span> <span class="f">==</span> <span class="c">0</span><span class="f">;</span>
<a name="489" /><span class="True">     489:</span> <span class="f">}</span>
<a name="490" /><span class="True">     490:</span> 
<a name="491" /><span class="True">     491:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">pmd_page_vaddr</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="492" /><span class="True">     492:</span> <span class="f">{</span>
<a name="493" /><span class="True">     493:</span>     <span class="m">return</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><a href="cpu.c_macros_ref.html#_X192YV8w"><span class="b">__va</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_cG1kX3ZhbF8w"><span class="b">pmd_val</span></a><span class="f">(</span><span class="b">pmd</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_UFRFX1BGTl9NQVNLXzA_"><span class="b">PTE_PFN_MASK</span></a><span class="f">)</span><span class="f">;</span>
<a name="494" /><span class="True">     494:</span> <span class="f">}</span>
<a name="495" /><span class="True">     495:</span> 
<a name="496" /><span class="True">     496:</span> <span class="k">/*</span>
<a name="497" /><span class="True">     497:</span> <span class="k"> * Currently stuck as a macro due to indirect forward reference to</span>
<a name="498" /><span class="True">     498:</span> <span class="k"> * linux/mmzone.h&apos;s __section_mem_map_addr() definition:</span>
<a name="499" /><span class="True">     499:</span> <span class="k"> */</span>
<a name="500" /><span class="True">     500:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cG1kX3BhZ2VfMA__"><span class="b">pmd_page</span></a><span class="f">(</span><span class="b">pmd</span><span class="f">)</span>    <a href="cpu.c_macros_ref.html#_cGZuX3RvX3BhZ2VfMA__"><span class="b">pfn_to_page</span></a><span class="f">(</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_cG1kX3ZhbF8w"><span class="b">pmd_val</span></a><span class="f">(</span><span class="b">pmd</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_UFRFX1BGTl9NQVNLXzA_"><span class="b">PTE_PFN_MASK</span></a><span class="f">)</span> <span class="f">&gt;&gt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span>
<a name="501" /><span class="True">     501:</span> 
<a name="502" /><span class="True">     502:</span> <span class="k">/*</span>
<a name="503" /><span class="True">     503:</span> <span class="k"> * the pmd page can be thought of an array like this: pmd_t[PTRS_PER_PMD]</span>
<a name="504" /><span class="True">     504:</span> <span class="k"> *</span>
<a name="505" /><span class="True">     505:</span> <span class="k"> * this macro returns the index of the entry in the pmd page which would</span>
<a name="506" /><span class="True">     506:</span> <span class="k"> * control the given virtual address</span>
<a name="507" /><span class="True">     507:</span> <span class="k"> */</span>
<a name="508" /><span class="True">     508:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">pmd_index</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">address</span><span class="f">)</span>
<a name="509" /><span class="True">     509:</span> <span class="f">{</span>
<a name="510" /><span class="True">     510:</span>     <span class="m">return</span> <span class="f">(</span><span class="b">address</span> <span class="f">&gt;&gt;</span> <a href="cpu.c_macros_ref.html#_UE1EX1NISUZUXzA_"><span class="b">PMD_SHIFT</span></a><span class="f">)</span> <span class="f">&amp;</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_UFRSU19QRVJfUE1EXzA_"><span class="b">PTRS_PER_PMD</span></a> <span class="f">-</span> <span class="c">1</span><span class="f">)</span><span class="f">;</span>
<a name="511" /><span class="True">     511:</span> <span class="f">}</span>
<a name="512" /><span class="True">     512:</span> 
<a name="513" /><span class="True">     513:</span> <span class="k">/*</span>
<a name="514" /><span class="True">     514:</span> <span class="k"> * Conversion functions: convert a page and protection to a page entry,</span>
<a name="515" /><span class="True">     515:</span> <span class="k"> * and a page entry and page directory to the page they refer to.</span>
<a name="516" /><span class="True">     516:</span> <span class="k"> *</span>
<a name="517" /><span class="True">     517:</span> <span class="k"> * (Currently stuck as a macro because of indirect forward reference</span>
<a name="518" /><span class="True">     518:</span> <span class="k"> * to linux/mm.h:page_to_nid())</span>
<a name="519" /><span class="True">     519:</span> <span class="k"> */</span>
<a name="520" /><span class="True">     520:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bWtfcHRlXzA_"><span class="b">mk_pte</span></a><span class="f">(</span><span class="b">page</span><span class="f">,</span> <span class="b">pgprot</span><span class="f">)</span>   <span class="b">pfn_pte</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_cGFnZV90b19wZm5fMA__"><span class="b">page_to_pfn</span></a><span class="f">(</span><span class="b">page</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">pgprot</span><span class="f">)</span><span class="f">)</span>
<a name="521" /><span class="True">     521:</span> 
<a name="522" /><span class="True">     522:</span> <span class="k">/*</span>
<a name="523" /><span class="True">     523:</span> <span class="k"> * the pte page can be thought of an array like this: pte_t[PTRS_PER_PTE]</span>
<a name="524" /><span class="True">     524:</span> <span class="k"> *</span>
<a name="525" /><span class="True">     525:</span> <span class="k"> * this function returns the index of the entry in the pte page which would</span>
<a name="526" /><span class="True">     526:</span> <span class="k"> * control the given virtual address</span>
<a name="527" /><span class="True">     527:</span> <span class="k"> */</span>
<a name="528" /><span class="True">     528:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">pte_index</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">address</span><span class="f">)</span>
<a name="529" /><span class="True">     529:</span> <span class="f">{</span>
<a name="530" /><span class="True">     530:</span>     <span class="m">return</span> <span class="f">(</span><span class="b">address</span> <span class="f">&gt;&gt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span> <span class="f">&amp;</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_UFRSU19QRVJfUFRFXzA_"><span class="b">PTRS_PER_PTE</span></a> <span class="f">-</span> <span class="c">1</span><span class="f">)</span><span class="f">;</span>
<a name="531" /><span class="True">     531:</span> <span class="f">}</span>
<a name="532" /><span class="True">     532:</span> 
<a name="533" /><span class="True">     533:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="f">*</span><span class="b">pte_offset_kernel</span><span class="f">(</span><span class="b">pmd_t</span> <span class="f">*</span><span class="b">pmd</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">address</span><span class="f">)</span>
<a name="534" /><span class="True">     534:</span> <span class="f">{</span>
<a name="535" /><span class="True">     535:</span>     <span class="m">return</span> <span class="f">(</span><span class="b">pte_t</span> <span class="f">*</span><span class="f">)</span><span class="b">pmd_page_vaddr</span><span class="f">(</span><span class="f">*</span><span class="b">pmd</span><span class="f">)</span> <span class="f">+</span> <span class="b">pte_index</span><span class="f">(</span><span class="b">address</span><span class="f">)</span><span class="f">;</span>
<a name="536" /><span class="True">     536:</span> <span class="f">}</span>
<a name="537" /><span class="True">     537:</span> 
<a name="538" /><span class="True">     538:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pmd_bad</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="539" /><span class="True">     539:</span> <span class="f">{</span>
<a name="540" /><span class="False">     540:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">CONFIG_NUMA_BALANCING</span>
<a name="541" /><span class="False">     541:</span>     <span class="k">/* pmd_numa check */</span>
<a name="542" /><span class="False">     542:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">(</span><span class="b">pmd_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_X1BBR0VfTlVNQV8w"><span class="b">_PAGE_NUMA</span></a><span class="f">|</span><a href="cpu.c_macros_ref.html#_X1BBR0VfUFJFU0VOVF8w"><span class="b">_PAGE_PRESENT</span></a><span class="f">)</span><span class="f">)</span> <span class="f">==</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfTlVNQV8w"><span class="b">_PAGE_NUMA</span></a><span class="f">)</span>
<a name="543" /><span class="False">     543:</span>         <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="544" /><span class="True">     544:</span> <span class="f">#</span><span class="n">endif</span>
<a name="545" /><span class="True">     545:</span>     <span class="m">return</span> <span class="f">(</span><span class="b">pmd_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">~</span><a href="cpu.c_macros_ref.html#_X1BBR0VfVVNFUl8w"><span class="b">_PAGE_USER</span></a><span class="f">)</span> <span class="f">!=</span> <a href="cpu.c_macros_ref.html#_X0tFUk5QR19UQUJMRV8w"><span class="b">_KERNPG_TABLE</span></a><span class="f">;</span>
<a name="546" /><span class="True">     546:</span> <span class="f">}</span>
<a name="547" /><span class="True">     547:</span> 
<a name="548" /><span class="True">     548:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">pages_to_mb</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">npg</span><span class="f">)</span>
<a name="549" /><span class="True">     549:</span> <span class="f">{</span>
<a name="550" /><span class="True">     550:</span>     <span class="m">return</span> <span class="b">npg</span> <span class="f">&gt;&gt;</span> <span class="f">(</span><span class="c">20</span> <span class="f">-</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span><span class="f">;</span>
<a name="551" /><span class="True">     551:</span> <span class="f">}</span>
<a name="552" /><span class="True">     552:</span> 
<a name="553" /><span class="True">     553:</span> <span class="f">#</span><span class="n">if</span> <a href="cpu.c_macros_ref.html#_UEFHRVRBQkxFX0xFVkVMU18w"><span class="b">PAGETABLE_LEVELS</span></a> <span class="f">&gt;</span> <span class="c">2</span>
<a name="554" /><span class="True">     554:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pud_none</span><span class="f">(</span><span class="b">pud_t</span> <span class="b">pud</span><span class="f">)</span>
<a name="555" /><span class="True">     555:</span> <span class="f">{</span>
<a name="556" /><span class="True">     556:</span>     <span class="m">return</span> <span class="b">native_pud_val</span><span class="f">(</span><span class="b">pud</span><span class="f">)</span> <span class="f">==</span> <span class="c">0</span><span class="f">;</span>
<a name="557" /><span class="True">     557:</span> <span class="f">}</span>
<a name="558" /><span class="True">     558:</span> 
<a name="559" /><span class="True">     559:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pud_present</span><span class="f">(</span><span class="b">pud_t</span> <span class="b">pud</span><span class="f">)</span>
<a name="560" /><span class="True">     560:</span> <span class="f">{</span>
<a name="561" /><span class="True">     561:</span>     <span class="m">return</span> <span class="b">pud_flags</span><span class="f">(</span><span class="b">pud</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFJFU0VOVF8w"><span class="b">_PAGE_PRESENT</span></a><span class="f">;</span>
<a name="562" /><span class="True">     562:</span> <span class="f">}</span>
<a name="563" /><span class="True">     563:</span> 
<a name="564" /><span class="True">     564:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">pud_page_vaddr</span><span class="f">(</span><span class="b">pud_t</span> <span class="b">pud</span><span class="f">)</span>
<a name="565" /><span class="True">     565:</span> <span class="f">{</span>
<a name="566" /><span class="True">     566:</span>     <span class="m">return</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><a href="cpu.c_macros_ref.html#_X192YV8w"><span class="b">__va</span></a><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><a href="cpu.c_macros_ref.html#_cHVkX3ZhbF8w"><span class="b">pud_val</span></a><span class="f">(</span><span class="b">pud</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_UFRFX1BGTl9NQVNLXzA_"><span class="b">PTE_PFN_MASK</span></a><span class="f">)</span><span class="f">;</span>
<a name="567" /><span class="True">     567:</span> <span class="f">}</span>
<a name="568" /><span class="True">     568:</span> 
<a name="569" /><span class="True">     569:</span> <span class="k">/*</span>
<a name="570" /><span class="True">     570:</span> <span class="k"> * Currently stuck as a macro due to indirect forward reference to</span>
<a name="571" /><span class="True">     571:</span> <span class="k"> * linux/mmzone.h&apos;s __section_mem_map_addr() definition:</span>
<a name="572" /><span class="True">     572:</span> <span class="k"> */</span>
<a name="573" /><span class="True">     573:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cHVkX3BhZ2VfMA__"><span class="b">pud_page</span></a><span class="f">(</span><span class="b">pud</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGZuX3RvX3BhZ2VfMA__"><span class="b">pfn_to_page</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_cHVkX3ZhbF8w"><span class="b">pud_val</span></a><span class="f">(</span><span class="b">pud</span><span class="f">)</span> <span class="f">&gt;&gt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span>
<a name="574" /><span class="True">     574:</span> 
<a name="575" /><span class="True">     575:</span> <span class="k">/* Find an entry in the second-level page table.. */</span>
<a name="576" /><span class="True">     576:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="f">*</span><span class="b">pmd_offset</span><span class="f">(</span><span class="b">pud_t</span> <span class="f">*</span><span class="b">pud</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">address</span><span class="f">)</span>
<a name="577" /><span class="True">     577:</span> <span class="f">{</span>
<a name="578" /><span class="True">     578:</span>     <span class="m">return</span> <span class="f">(</span><span class="b">pmd_t</span> <span class="f">*</span><span class="f">)</span><span class="b">pud_page_vaddr</span><span class="f">(</span><span class="f">*</span><span class="b">pud</span><span class="f">)</span> <span class="f">+</span> <span class="b">pmd_index</span><span class="f">(</span><span class="b">address</span><span class="f">)</span><span class="f">;</span>
<a name="579" /><span class="True">     579:</span> <span class="f">}</span>
<a name="580" /><span class="True">     580:</span> 
<a name="581" /><span class="True">     581:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pud_large</span><span class="f">(</span><span class="b">pud_t</span> <span class="b">pud</span><span class="f">)</span>
<a name="582" /><span class="True">     582:</span> <span class="f">{</span>
<a name="583" /><span class="True">     583:</span>     <span class="m">return</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_cHVkX3ZhbF8w"><span class="b">pud_val</span></a><span class="f">(</span><span class="b">pud</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_X1BBR0VfUFNFXzA_"><span class="b">_PAGE_PSE</span></a> <span class="f">|</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFJFU0VOVF8w"><span class="b">_PAGE_PRESENT</span></a><span class="f">)</span><span class="f">)</span> <span class="f">==</span>
<a name="584" /><span class="True">     584:</span>         <span class="f">(</span><a href="cpu.c_macros_ref.html#_X1BBR0VfUFNFXzA_"><span class="b">_PAGE_PSE</span></a> <span class="f">|</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFJFU0VOVF8w"><span class="b">_PAGE_PRESENT</span></a><span class="f">)</span><span class="f">;</span>
<a name="585" /><span class="True">     585:</span> <span class="f">}</span>
<a name="586" /><span class="True">     586:</span> 
<a name="587" /><span class="True">     587:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pud_bad</span><span class="f">(</span><span class="b">pud_t</span> <span class="b">pud</span><span class="f">)</span>
<a name="588" /><span class="True">     588:</span> <span class="f">{</span>
<a name="589" /><span class="True">     589:</span>     <span class="m">return</span> <span class="f">(</span><span class="b">pud_flags</span><span class="f">(</span><span class="b">pud</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">~</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_X0tFUk5QR19UQUJMRV8w"><span class="b">_KERNPG_TABLE</span></a> <span class="f">|</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfVVNFUl8w"><span class="b">_PAGE_USER</span></a><span class="f">)</span><span class="f">)</span> <span class="f">!=</span> <span class="c">0</span><span class="f">;</span>
<a name="590" /><span class="True">     590:</span> <span class="f">}</span>
<a name="591" /><span class="False">     591:</span> <span class="f">#</span><span class="n">else</span>
<a name="592" /><span class="False">     592:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pud_large</span><span class="f">(</span><span class="b">pud_t</span> <span class="b">pud</span><span class="f">)</span>
<a name="593" /><span class="False">     593:</span> <span class="f">{</span>
<a name="594" /><span class="False">     594:</span>     <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="595" /><span class="False">     595:</span> <span class="f">}</span>
<a name="596" /><span class="True">     596:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* PAGETABLE_LEVELS &gt; 2 */</span>
<a name="597" /><span class="True">     597:</span> 
<a name="598" /><span class="True">     598:</span> <span class="f">#</span><span class="n">if</span> <a href="cpu.c_macros_ref.html#_UEFHRVRBQkxFX0xFVkVMU18w"><span class="b">PAGETABLE_LEVELS</span></a> <span class="f">&gt;</span> <span class="c">3</span>
<a name="599" /><span class="True">     599:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pgd_present</span><span class="f">(</span><span class="b">pgd_t</span> <span class="b">pgd</span><span class="f">)</span>
<a name="600" /><span class="True">     600:</span> <span class="f">{</span>
<a name="601" /><span class="True">     601:</span>     <span class="m">return</span> <span class="b">pgd_flags</span><span class="f">(</span><span class="b">pgd</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUFJFU0VOVF8w"><span class="b">_PAGE_PRESENT</span></a><span class="f">;</span>
<a name="602" /><span class="True">     602:</span> <span class="f">}</span>
<a name="603" /><span class="True">     603:</span> 
<a name="604" /><span class="True">     604:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">pgd_page_vaddr</span><span class="f">(</span><span class="b">pgd_t</span> <span class="b">pgd</span><span class="f">)</span>
<a name="605" /><span class="True">     605:</span> <span class="f">{</span>
<a name="606" /><span class="True">     606:</span>     <span class="m">return</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><a href="cpu.c_macros_ref.html#_X192YV8w"><span class="b">__va</span></a><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><a href="cpu.c_macros_ref.html#_cGdkX3ZhbF8w"><span class="b">pgd_val</span></a><span class="f">(</span><span class="b">pgd</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_UFRFX1BGTl9NQVNLXzA_"><span class="b">PTE_PFN_MASK</span></a><span class="f">)</span><span class="f">;</span>
<a name="607" /><span class="True">     607:</span> <span class="f">}</span>
<a name="608" /><span class="True">     608:</span> 
<a name="609" /><span class="True">     609:</span> <span class="k">/*</span>
<a name="610" /><span class="True">     610:</span> <span class="k"> * Currently stuck as a macro due to indirect forward reference to</span>
<a name="611" /><span class="True">     611:</span> <span class="k"> * linux/mmzone.h&apos;s __section_mem_map_addr() definition:</span>
<a name="612" /><span class="True">     612:</span> <span class="k"> */</span>
<a name="613" /><span class="True">     613:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cGdkX3BhZ2VfMA__"><span class="b">pgd_page</span></a><span class="f">(</span><span class="b">pgd</span><span class="f">)</span>        <a href="cpu.c_macros_ref.html#_cGZuX3RvX3BhZ2VfMA__"><span class="b">pfn_to_page</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_cGdkX3ZhbF8w"><span class="b">pgd_val</span></a><span class="f">(</span><span class="b">pgd</span><span class="f">)</span> <span class="f">&gt;&gt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span>
<a name="614" /><span class="True">     614:</span> 
<a name="615" /><span class="True">     615:</span> <span class="k">/* to find an entry in a page-table-directory. */</span>
<a name="616" /><span class="True">     616:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">pud_index</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">address</span><span class="f">)</span>
<a name="617" /><span class="True">     617:</span> <span class="f">{</span>
<a name="618" /><span class="True">     618:</span>     <span class="m">return</span> <span class="f">(</span><span class="b">address</span> <span class="f">&gt;&gt;</span> <a href="cpu.c_macros_ref.html#_UFVEX1NISUZUXzA_"><span class="b">PUD_SHIFT</span></a><span class="f">)</span> <span class="f">&amp;</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_UFRSU19QRVJfUFVEXzA_"><span class="b">PTRS_PER_PUD</span></a> <span class="f">-</span> <span class="c">1</span><span class="f">)</span><span class="f">;</span>
<a name="619" /><span class="True">     619:</span> <span class="f">}</span>
<a name="620" /><span class="True">     620:</span> 
<a name="621" /><span class="True">     621:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pud_t</span> <span class="f">*</span><span class="b">pud_offset</span><span class="f">(</span><span class="b">pgd_t</span> <span class="f">*</span><span class="b">pgd</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">address</span><span class="f">)</span>
<a name="622" /><span class="True">     622:</span> <span class="f">{</span>
<a name="623" /><span class="True">     623:</span>     <span class="m">return</span> <span class="f">(</span><span class="b">pud_t</span> <span class="f">*</span><span class="f">)</span><span class="b">pgd_page_vaddr</span><span class="f">(</span><span class="f">*</span><span class="b">pgd</span><span class="f">)</span> <span class="f">+</span> <span class="b">pud_index</span><span class="f">(</span><span class="b">address</span><span class="f">)</span><span class="f">;</span>
<a name="624" /><span class="True">     624:</span> <span class="f">}</span>
<a name="625" /><span class="True">     625:</span> 
<a name="626" /><span class="True">     626:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pgd_bad</span><span class="f">(</span><span class="b">pgd_t</span> <span class="b">pgd</span><span class="f">)</span>
<a name="627" /><span class="True">     627:</span> <span class="f">{</span>
<a name="628" /><span class="True">     628:</span>     <span class="m">return</span> <span class="f">(</span><span class="b">pgd_flags</span><span class="f">(</span><span class="b">pgd</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">~</span><a href="cpu.c_macros_ref.html#_X1BBR0VfVVNFUl8w"><span class="b">_PAGE_USER</span></a><span class="f">)</span> <span class="f">!=</span> <a href="cpu.c_macros_ref.html#_X0tFUk5QR19UQUJMRV8w"><span class="b">_KERNPG_TABLE</span></a><span class="f">;</span>
<a name="629" /><span class="True">     629:</span> <span class="f">}</span>
<a name="630" /><span class="True">     630:</span> 
<a name="631" /><span class="True">     631:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pgd_none</span><span class="f">(</span><span class="b">pgd_t</span> <span class="b">pgd</span><span class="f">)</span>
<a name="632" /><span class="True">     632:</span> <span class="f">{</span>
<a name="633" /><span class="True">     633:</span>     <span class="m">return</span> <span class="f">!</span><span class="b">native_pgd_val</span><span class="f">(</span><span class="b">pgd</span><span class="f">)</span><span class="f">;</span>
<a name="634" /><span class="True">     634:</span> <span class="f">}</span>
<a name="635" /><span class="True">     635:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* PAGETABLE_LEVELS &gt; 3 */</span>
<a name="636" /><span class="True">     636:</span> 
<a name="637" /><span class="True">     637:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* __ASSEMBLY__ */</span>
<a name="638" /><span class="True">     638:</span> 
<a name="639" /><span class="True">     639:</span> <span class="k">/*</span>
<a name="640" /><span class="True">     640:</span> <span class="k"> * the pgd page can be thought of an array like this: pgd_t[PTRS_PER_PGD]</span>
<a name="641" /><span class="True">     641:</span> <span class="k"> *</span>
<a name="642" /><span class="True">     642:</span> <span class="k"> * this macro returns the index of the entry in the pgd page which would</span>
<a name="643" /><span class="True">     643:</span> <span class="k"> * control the given virtual address</span>
<a name="644" /><span class="True">     644:</span> <span class="k"> */</span>
<a name="645" /><span class="True">     645:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cGdkX2luZGV4XzA_"><span class="b">pgd_index</span></a><span class="f">(</span><span class="b">address</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">address</span><span class="f">)</span> <span class="f">&gt;&gt;</span> <a href="cpu.c_macros_noref.html#_UEdESVJfU0hJRlRfMA__"><span class="b">PGDIR_SHIFT</span></a><span class="f">)</span> <span class="f">&amp;</span> <span class="f">(</span><a href="cpu.c_macros_noref.html#_UFRSU19QRVJfUEdEXzA_"><span class="b">PTRS_PER_PGD</span></a> <span class="f">-</span> <span class="c">1</span><span class="f">)</span><span class="f">)</span>
<a name="646" /><span class="True">     646:</span> 
<a name="647" /><span class="True">     647:</span> <span class="k">/*</span>
<a name="648" /><span class="True">     648:</span> <span class="k"> * pgd_offset() returns a (pgd_t *)</span>
<a name="649" /><span class="True">     649:</span> <span class="k"> * pgd_index() is used get the offset into the pgd page&apos;s array of pgd_t&apos;s;</span>
<a name="650" /><span class="True">     650:</span> <span class="k"> */</span>
<a name="651" /><span class="True">     651:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cGdkX29mZnNldF8w"><span class="b">pgd_offset</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">address</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="b">mm</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">pgd</span> <span class="f">+</span> <a href="cpu.c_macros_noref.html#_cGdkX2luZGV4XzA_"><span class="b">pgd_index</span></a><span class="f">(</span><span class="f">(</span><span class="b">address</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>
<a name="652" /><span class="True">     652:</span> <span class="k">/*</span>
<a name="653" /><span class="True">     653:</span> <span class="k"> * a shortcut which implies the use of the kernel&apos;s pgd, instead</span>
<a name="654" /><span class="True">     654:</span> <span class="k"> * of a process&apos;s</span>
<a name="655" /><span class="True">     655:</span> <span class="k"> */</span>
<a name="656" /><span class="True">     656:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cGdkX29mZnNldF9rXzA_"><span class="b">pgd_offset_k</span></a><span class="f">(</span><span class="b">address</span><span class="f">)</span> <a href="cpu.c_macros_noref.html#_cGdkX29mZnNldF8w"><span class="b">pgd_offset</span></a><span class="f">(</span><span class="f">&amp;</span><span class="b">init_mm</span><span class="f">,</span> <span class="f">(</span><span class="b">address</span><span class="f">)</span><span class="f">)</span>
<a name="657" /><span class="True">     657:</span> 
<a name="658" /><span class="True">     658:</span> 
<a name="659" /><span class="True">     659:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_S0VSTkVMX1BHRF9CT1VOREFSWV8w"><span class="b">KERNEL_PGD_BOUNDARY</span></a>    <a href="cpu.c_macros_noref.html#_cGdkX2luZGV4XzA_"><span class="b">pgd_index</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_UEFHRV9PRkZTRVRfMA__"><span class="b">PAGE_OFFSET</span></a><span class="f">)</span>
<a name="660" /><span class="True">     660:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_S0VSTkVMX1BHRF9QVFJTXzA_"><span class="b">KERNEL_PGD_PTRS</span></a>        <span class="f">(</span><a href="cpu.c_macros_noref.html#_UFRSU19QRVJfUEdEXzA_"><span class="b">PTRS_PER_PGD</span></a> <span class="f">-</span> <a href="cpu.c_macros_noref.html#_S0VSTkVMX1BHRF9CT1VOREFSWV8w"><span class="b">KERNEL_PGD_BOUNDARY</span></a><span class="f">)</span>
<a name="661" /><span class="True">     661:</span> 
<a name="662" /><span class="True">     662:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__ASSEMBLY__</span>
<a name="663" /><span class="True">     663:</span> 
<a name="664" /><span class="True">     664:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">direct_gbpages</span><span class="f">;</span>
<a name="665" /><span class="True">     665:</span> <span class="m">void</span> <span class="b">init_mem_mapping</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="666" /><span class="True">     666:</span> <span class="m">void</span> <span class="b">early_alloc_pgt_buf</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="667" /><span class="True">     667:</span> 
<a name="668" /><span class="True">     668:</span> <span class="k">/* local pte updates need not use xchg for locking */</span>
<a name="669" /><span class="True">     669:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">native_local_ptep_get_and_clear</span><span class="f">(</span><span class="b">pte_t</span> <span class="f">*</span><span class="b">ptep</span><span class="f">)</span>
<a name="670" /><span class="True">     670:</span> <span class="f">{</span>
<a name="671" /><span class="True">     671:</span>     <span class="b">pte_t</span> <span class="b">res</span> <span class="f">=</span> <span class="f">*</span><span class="b">ptep</span><span class="f">;</span>
<a name="672" /><span class="True">     672:</span> 
<a name="673" /><span class="True">     673:</span>     <span class="k">/* Pure native function needs no input for mm, addr */</span>
<a name="674" /><span class="True">     674:</span>     <span class="b">native_pte_clear</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">,</span> <span class="c">0</span><span class="f">,</span> <span class="b">ptep</span><span class="f">)</span><span class="f">;</span>
<a name="675" /><span class="True">     675:</span>     <span class="m">return</span> <span class="b">res</span><span class="f">;</span>
<a name="676" /><span class="True">     676:</span> <span class="f">}</span>
<a name="677" /><span class="True">     677:</span> 
<a name="678" /><span class="True">     678:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">native_local_pmdp_get_and_clear</span><span class="f">(</span><span class="b">pmd_t</span> <span class="f">*</span><span class="b">pmdp</span><span class="f">)</span>
<a name="679" /><span class="True">     679:</span> <span class="f">{</span>
<a name="680" /><span class="True">     680:</span>     <span class="b">pmd_t</span> <span class="b">res</span> <span class="f">=</span> <span class="f">*</span><span class="b">pmdp</span><span class="f">;</span>
<a name="681" /><span class="True">     681:</span> 
<a name="682" /><span class="True">     682:</span>     <span class="b">native_pmd_clear</span><span class="f">(</span><span class="b">pmdp</span><span class="f">)</span><span class="f">;</span>
<a name="683" /><span class="True">     683:</span>     <span class="m">return</span> <span class="b">res</span><span class="f">;</span>
<a name="684" /><span class="True">     684:</span> <span class="f">}</span>
<a name="685" /><span class="True">     685:</span> 
<a name="686" /><span class="True">     686:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_set_pte_at</span><span class="f">(</span><span class="m">struct</span> <span class="b">mm_struct</span> <span class="f">*</span><span class="b">mm</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">,</span>
<a name="687" /><span class="True">     687:</span>                      <span class="b">pte_t</span> <span class="f">*</span><span class="b">ptep</span> <span class="f">,</span> <span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="688" /><span class="True">     688:</span> <span class="f">{</span>
<a name="689" /><span class="True">     689:</span>     <span class="b">native_set_pte</span><span class="f">(</span><span class="b">ptep</span><span class="f">,</span> <span class="b">pte</span><span class="f">)</span><span class="f">;</span>
<a name="690" /><span class="True">     690:</span> <span class="f">}</span>
<a name="691" /><span class="True">     691:</span> 
<a name="692" /><span class="True">     692:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">native_set_pmd_at</span><span class="f">(</span><span class="m">struct</span> <span class="b">mm_struct</span> <span class="f">*</span><span class="b">mm</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">,</span>
<a name="693" /><span class="True">     693:</span>                      <span class="b">pmd_t</span> <span class="f">*</span><span class="b">pmdp</span> <span class="f">,</span> <span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="694" /><span class="True">     694:</span> <span class="f">{</span>
<a name="695" /><span class="True">     695:</span>     <span class="b">native_set_pmd</span><span class="f">(</span><span class="b">pmdp</span><span class="f">,</span> <span class="b">pmd</span><span class="f">)</span><span class="f">;</span>
<a name="696" /><span class="True">     696:</span> <span class="f">}</span>
<a name="697" /><span class="True">     697:</span> 
<a name="698" /><span class="True">     698:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">CONFIG_PARAVIRT</span>
<a name="699" /><span class="True">     699:</span> <span class="k">/*</span>
<a name="700" /><span class="True">     700:</span> <span class="k"> * Rules for using pte_update - it must be called after any PTE update which</span>
<a name="701" /><span class="True">     701:</span> <span class="k"> * has not been done using the set_pte / clear_pte interfaces.  It is used by</span>
<a name="702" /><span class="True">     702:</span> <span class="k"> * shadow mode hypervisors to resynchronize the shadow page tables.  Kernel PTE</span>
<a name="703" /><span class="True">     703:</span> <span class="k"> * updates should either be sets, clears, or set_pte_atomic for P-&gt;P</span>
<a name="704" /><span class="True">     704:</span> <span class="k"> * transitions, which means this hook should only be called for user PTEs.</span>
<a name="705" /><span class="True">     705:</span> <span class="k"> * This hook implies a P-&gt;P protection or access change has taken place, which</span>
<a name="706" /><span class="True">     706:</span> <span class="k"> * requires a subsequent TLB flush.  The notification can optionally be delayed</span>
<a name="707" /><span class="True">     707:</span> <span class="k"> * until the TLB flush event by using the pte_update_defer form of the</span>
<a name="708" /><span class="True">     708:</span> <span class="k"> * interface, but care must be taken to assure that the flush happens while</span>
<a name="709" /><span class="True">     709:</span> <span class="k"> * still holding the same page table lock so that the shadow and primary pages</span>
<a name="710" /><span class="True">     710:</span> <span class="k"> * do not become out of sync on SMP.</span>
<a name="711" /><span class="True">     711:</span> <span class="k"> */</span>
<a name="712" /><span class="True">     712:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_cHRlX3VwZGF0ZV8w"><span class="b">pte_update</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">ptep</span><span class="f">)</span>        <span class="m">do</span> <span class="f">{</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="713" /><span class="True">     713:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_cHRlX3VwZGF0ZV9kZWZlcl8w"><span class="b">pte_update_defer</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">ptep</span><span class="f">)</span>    <span class="m">do</span> <span class="f">{</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="714" /><span class="True">     714:</span> <span class="f">#</span><span class="n">endif</span>
<a name="715" /><span class="True">     715:</span> 
<a name="716" /><span class="True">     716:</span> <span class="k">/*</span>
<a name="717" /><span class="True">     717:</span> <span class="k"> * We only update the dirty/accessed state if we set</span>
<a name="718" /><span class="True">     718:</span> <span class="k"> * the dirty bit by hand in the kernel, since the hardware</span>
<a name="719" /><span class="True">     719:</span> <span class="k"> * will do the accessed bit for us, and we don&apos;t want to</span>
<a name="720" /><span class="True">     720:</span> <span class="k"> * race with other CPU&apos;s that might be updating the dirty</span>
<a name="721" /><span class="True">     721:</span> <span class="k"> * bit at the same time.</span>
<a name="722" /><span class="True">     722:</span> <span class="k"> */</span>
<a name="723" /><span class="True">     723:</span> <span class="m">struct</span> <span class="b">vm_area_struct</span><span class="f">;</span>
<a name="724" /><span class="True">     724:</span> 
<a name="725" /><span class="True">     725:</span> <span class="f">#</span><span class="n">define</span>  <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTXzA_"><span class="b">__HAVE_ARCH_PTEP_SET_ACCESS_FLAGS</span></a>
<a name="726" /><span class="True">     726:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">ptep_set_access_flags</span><span class="f">(</span><span class="m">struct</span> <span class="b">vm_area_struct</span> <span class="f">*</span><span class="b">vma</span><span class="f">,</span>
<a name="727" /><span class="True">     727:</span>                  <span class="m">unsigned</span> <span class="m">long</span> <span class="b">address</span><span class="f">,</span> <span class="b">pte_t</span> <span class="f">*</span><span class="b">ptep</span><span class="f">,</span>
<a name="728" /><span class="True">     728:</span>                  <span class="b">pte_t</span> <span class="b">entry</span><span class="f">,</span> <span class="m">int</span> <span class="b">dirty</span><span class="f">)</span><span class="f">;</span>
<a name="729" /><span class="True">     729:</span> 
<a name="730" /><span class="True">     730:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ZT1VOR18w"><span class="b">__HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG</span></a>
<a name="731" /><span class="True">     731:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">ptep_test_and_clear_young</span><span class="f">(</span><span class="m">struct</span> <span class="b">vm_area_struct</span> <span class="f">*</span><span class="b">vma</span><span class="f">,</span>
<a name="732" /><span class="True">     732:</span>                      <span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">,</span> <span class="b">pte_t</span> <span class="f">*</span><span class="b">ptep</span><span class="f">)</span><span class="f">;</span>
<a name="733" /><span class="True">     733:</span> 
<a name="734" /><span class="True">     734:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ZT1VOR19GTFVTSF8w"><span class="b">__HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH</span></a>
<a name="735" /><span class="True">     735:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">ptep_clear_flush_young</span><span class="f">(</span><span class="m">struct</span> <span class="b">vm_area_struct</span> <span class="f">*</span><span class="b">vma</span><span class="f">,</span>
<a name="736" /><span class="True">     736:</span>                   <span class="m">unsigned</span> <span class="m">long</span> <span class="b">address</span><span class="f">,</span> <span class="b">pte_t</span> <span class="f">*</span><span class="b">ptep</span><span class="f">)</span><span class="f">;</span>
<a name="737" /><span class="True">     737:</span> 
<a name="738" /><span class="True">     738:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSXzA_"><span class="b">__HAVE_ARCH_PTEP_GET_AND_CLEAR</span></a>
<a name="739" /><span class="True">     739:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">ptep_get_and_clear</span><span class="f">(</span><span class="m">struct</span> <span class="b">mm_struct</span> <span class="f">*</span><span class="b">mm</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">,</span>
<a name="740" /><span class="True">     740:</span>                        <span class="b">pte_t</span> <span class="f">*</span><span class="b">ptep</span><span class="f">)</span>
<a name="741" /><span class="True">     741:</span> <span class="f">{</span>
<a name="742" /><span class="True">     742:</span>     <span class="b">pte_t</span> <span class="b">pte</span> <span class="f">=</span> <span class="b">native_ptep_get_and_clear</span><span class="f">(</span><span class="b">ptep</span><span class="f">)</span><span class="f">;</span>
<a name="743" /><span class="True">     743:</span>     <a href="cpu.c_macros_ref.html#_cHRlX3VwZGF0ZV8w"><span class="b">pte_update</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">ptep</span><span class="f">)</span><span class="f">;</span>
<a name="744" /><span class="True">     744:</span>     <span class="m">return</span> <span class="b">pte</span><span class="f">;</span>
<a name="745" /><span class="True">     745:</span> <span class="f">}</span>
<a name="746" /><span class="True">     746:</span> 
<a name="747" /><span class="True">     747:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSX0ZVTExfMA__"><span class="b">__HAVE_ARCH_PTEP_GET_AND_CLEAR_FULL</span></a>
<a name="748" /><span class="True">     748:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">ptep_get_and_clear_full</span><span class="f">(</span><span class="m">struct</span> <span class="b">mm_struct</span> <span class="f">*</span><span class="b">mm</span><span class="f">,</span>
<a name="749" /><span class="True">     749:</span>                         <span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">,</span> <span class="b">pte_t</span> <span class="f">*</span><span class="b">ptep</span><span class="f">,</span>
<a name="750" /><span class="True">     750:</span>                         <span class="m">int</span> <span class="b">full</span><span class="f">)</span>
<a name="751" /><span class="True">     751:</span> <span class="f">{</span>
<a name="752" /><span class="True">     752:</span>     <span class="b">pte_t</span> <span class="b">pte</span><span class="f">;</span>
<a name="753" /><span class="True">     753:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">full</span><span class="f">)</span> <span class="f">{</span>
<a name="754" /><span class="True">     754:</span>         <span class="k">/*</span>
<a name="755" /><span class="True">     755:</span> <span class="k">         * Full address destruction in progress; paravirt does not</span>
<a name="756" /><span class="True">     756:</span> <span class="k">         * care about updates and native needs no locking</span>
<a name="757" /><span class="True">     757:</span> <span class="k">         */</span>
<a name="758" /><span class="True">     758:</span>         <span class="b">pte</span> <span class="f">=</span> <span class="b">native_local_ptep_get_and_clear</span><span class="f">(</span><span class="b">ptep</span><span class="f">)</span><span class="f">;</span>
<a name="759" /><span class="True">     759:</span>     <span class="f">}</span> <span class="m">else</span> <span class="f">{</span>
<a name="760" /><span class="True">     760:</span>         <span class="b">pte</span> <span class="f">=</span> <span class="b">ptep_get_and_clear</span><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">ptep</span><span class="f">)</span><span class="f">;</span>
<a name="761" /><span class="True">     761:</span>     <span class="f">}</span>
<a name="762" /><span class="True">     762:</span>     <span class="m">return</span> <span class="b">pte</span><span class="f">;</span>
<a name="763" /><span class="True">     763:</span> <span class="f">}</span>
<a name="764" /><span class="True">     764:</span> 
<a name="765" /><span class="True">     765:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUFRFUF9TRVRfV1JQUk9URUNUXzA_"><span class="b">__HAVE_ARCH_PTEP_SET_WRPROTECT</span></a>
<a name="766" /><span class="True">     766:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">ptep_set_wrprotect</span><span class="f">(</span><span class="m">struct</span> <span class="b">mm_struct</span> <span class="f">*</span><span class="b">mm</span><span class="f">,</span>
<a name="767" /><span class="True">     767:</span>                       <span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">,</span> <span class="b">pte_t</span> <span class="f">*</span><span class="b">ptep</span><span class="f">)</span>
<a name="768" /><span class="True">     768:</span> <span class="f">{</span>
<a name="769" /><span class="True">     769:</span>     <span class="b">clear_bit</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_X1BBR0VfQklUX1JXXzA_"><span class="b">_PAGE_BIT_RW</span></a><span class="f">,</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="f">*</span><span class="f">)</span><span class="f">&amp;</span><span class="b">ptep</span><span class="f">-&gt;</span><span class="b">pte</span><span class="f">)</span><span class="f">;</span>
<a name="770" /><span class="True">     770:</span>     <a href="cpu.c_macros_ref.html#_cHRlX3VwZGF0ZV8w"><span class="b">pte_update</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">ptep</span><span class="f">)</span><span class="f">;</span>
<a name="771" /><span class="True">     771:</span> <span class="f">}</span>
<a name="772" /><span class="True">     772:</span> 
<a name="773" /><span class="True">     773:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_Zmx1c2hfdGxiX2ZpeF9zcHVyaW91c19mYXVsdF8w"><span class="b">flush_tlb_fix_spurious_fault</span></a><span class="f">(</span><span class="b">vma</span><span class="f">,</span> <span class="b">address</span><span class="f">)</span> <span class="m">do</span> <span class="f">{</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="774" /><span class="True">     774:</span> 
<a name="775" /><span class="True">     775:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bWtfcG1kXzA_"><span class="b">mk_pmd</span></a><span class="f">(</span><span class="b">page</span><span class="f">,</span> <span class="b">pgprot</span><span class="f">)</span>   <span class="b">pfn_pmd</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_cGFnZV90b19wZm5fMA__"><span class="b">page_to_pfn</span></a><span class="f">(</span><span class="b">page</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">pgprot</span><span class="f">)</span><span class="f">)</span>
<a name="776" /><span class="True">     776:</span> 
<a name="777" /><span class="True">     777:</span> <span class="f">#</span><span class="n">define</span>  <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUE1EUF9TRVRfQUNDRVNTX0ZMQUdTXzA_"><span class="b">__HAVE_ARCH_PMDP_SET_ACCESS_FLAGS</span></a>
<a name="778" /><span class="True">     778:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pmdp_set_access_flags</span><span class="f">(</span><span class="m">struct</span> <span class="b">vm_area_struct</span> <span class="f">*</span><span class="b">vma</span><span class="f">,</span>
<a name="779" /><span class="True">     779:</span>                  <span class="m">unsigned</span> <span class="m">long</span> <span class="b">address</span><span class="f">,</span> <span class="b">pmd_t</span> <span class="f">*</span><span class="b">pmdp</span><span class="f">,</span>
<a name="780" /><span class="True">     780:</span>                  <span class="b">pmd_t</span> <span class="b">entry</span><span class="f">,</span> <span class="m">int</span> <span class="b">dirty</span><span class="f">)</span><span class="f">;</span>
<a name="781" /><span class="True">     781:</span> 
<a name="782" /><span class="True">     782:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUE1EUF9URVNUX0FORF9DTEVBUl9ZT1VOR18w"><span class="b">__HAVE_ARCH_PMDP_TEST_AND_CLEAR_YOUNG</span></a>
<a name="783" /><span class="True">     783:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pmdp_test_and_clear_young</span><span class="f">(</span><span class="m">struct</span> <span class="b">vm_area_struct</span> <span class="f">*</span><span class="b">vma</span><span class="f">,</span>
<a name="784" /><span class="True">     784:</span>                      <span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">,</span> <span class="b">pmd_t</span> <span class="f">*</span><span class="b">pmdp</span><span class="f">)</span><span class="f">;</span>
<a name="785" /><span class="True">     785:</span> 
<a name="786" /><span class="True">     786:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUE1EUF9DTEVBUl9ZT1VOR19GTFVTSF8w"><span class="b">__HAVE_ARCH_PMDP_CLEAR_YOUNG_FLUSH</span></a>
<a name="787" /><span class="True">     787:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">pmdp_clear_flush_young</span><span class="f">(</span><span class="m">struct</span> <span class="b">vm_area_struct</span> <span class="f">*</span><span class="b">vma</span><span class="f">,</span>
<a name="788" /><span class="True">     788:</span>                   <span class="m">unsigned</span> <span class="m">long</span> <span class="b">address</span><span class="f">,</span> <span class="b">pmd_t</span> <span class="f">*</span><span class="b">pmdp</span><span class="f">)</span><span class="f">;</span>
<a name="789" /><span class="True">     789:</span> 
<a name="790" /><span class="True">     790:</span> 
<a name="791" /><span class="True">     791:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUE1EUF9TUExJVFRJTkdfRkxVU0hfMA__"><span class="b">__HAVE_ARCH_PMDP_SPLITTING_FLUSH</span></a>
<a name="792" /><span class="True">     792:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">pmdp_splitting_flush</span><span class="f">(</span><span class="m">struct</span> <span class="b">vm_area_struct</span> <span class="f">*</span><span class="b">vma</span><span class="f">,</span>
<a name="793" /><span class="True">     793:</span>                  <span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">,</span> <span class="b">pmd_t</span> <span class="f">*</span><span class="b">pmdp</span><span class="f">)</span><span class="f">;</span>
<a name="794" /><span class="True">     794:</span> 
<a name="795" /><span class="True">     795:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUE1EX1dSSVRFXzA_"><span class="b">__HAVE_ARCH_PMD_WRITE</span></a>
<a name="796" /><span class="True">     796:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pmd_write</span><span class="f">(</span><span class="b">pmd_t</span> <span class="b">pmd</span><span class="f">)</span>
<a name="797" /><span class="True">     797:</span> <span class="f">{</span>
<a name="798" /><span class="True">     798:</span>     <span class="m">return</span> <span class="b">pmd_flags</span><span class="f">(</span><span class="b">pmd</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfUldfMA__"><span class="b">_PAGE_RW</span></a><span class="f">;</span>
<a name="799" /><span class="True">     799:</span> <span class="f">}</span>
<a name="800" /><span class="True">     800:</span> 
<a name="801" /><span class="True">     801:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUE1EUF9HRVRfQU5EX0NMRUFSXzA_"><span class="b">__HAVE_ARCH_PMDP_GET_AND_CLEAR</span></a>
<a name="802" /><span class="True">     802:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pmd_t</span> <span class="b">pmdp_get_and_clear</span><span class="f">(</span><span class="m">struct</span> <span class="b">mm_struct</span> <span class="f">*</span><span class="b">mm</span><span class="f">,</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">,</span>
<a name="803" /><span class="True">     803:</span>                        <span class="b">pmd_t</span> <span class="f">*</span><span class="b">pmdp</span><span class="f">)</span>
<a name="804" /><span class="True">     804:</span> <span class="f">{</span>
<a name="805" /><span class="True">     805:</span>     <span class="b">pmd_t</span> <span class="b">pmd</span> <span class="f">=</span> <span class="b">native_pmdp_get_and_clear</span><span class="f">(</span><span class="b">pmdp</span><span class="f">)</span><span class="f">;</span>
<a name="806" /><span class="True">     806:</span>     <a href="cpu.c_macros_ref.html#_cG1kX3VwZGF0ZV8w"><span class="b">pmd_update</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">pmdp</span><span class="f">)</span><span class="f">;</span>
<a name="807" /><span class="True">     807:</span>     <span class="m">return</span> <span class="b">pmd</span><span class="f">;</span>
<a name="808" /><span class="True">     808:</span> <span class="f">}</span>
<a name="809" /><span class="True">     809:</span> 
<a name="810" /><span class="True">     810:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19IQVZFX0FSQ0hfUE1EUF9TRVRfV1JQUk9URUNUXzA_"><span class="b">__HAVE_ARCH_PMDP_SET_WRPROTECT</span></a>
<a name="811" /><span class="True">     811:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">pmdp_set_wrprotect</span><span class="f">(</span><span class="m">struct</span> <span class="b">mm_struct</span> <span class="f">*</span><span class="b">mm</span><span class="f">,</span>
<a name="812" /><span class="True">     812:</span>                       <span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">,</span> <span class="b">pmd_t</span> <span class="f">*</span><span class="b">pmdp</span><span class="f">)</span>
<a name="813" /><span class="True">     813:</span> <span class="f">{</span>
<a name="814" /><span class="True">     814:</span>     <span class="b">clear_bit</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_X1BBR0VfQklUX1JXXzA_"><span class="b">_PAGE_BIT_RW</span></a><span class="f">,</span> <span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="f">*</span><span class="f">)</span><span class="b">pmdp</span><span class="f">)</span><span class="f">;</span>
<a name="815" /><span class="True">     815:</span>     <a href="cpu.c_macros_ref.html#_cG1kX3VwZGF0ZV8w"><span class="b">pmd_update</span></a><span class="f">(</span><span class="b">mm</span><span class="f">,</span> <span class="b">addr</span><span class="f">,</span> <span class="b">pmdp</span><span class="f">)</span><span class="f">;</span>
<a name="816" /><span class="True">     816:</span> <span class="f">}</span>
<a name="817" /><span class="True">     817:</span> 
<a name="818" /><span class="True">     818:</span> <span class="k">/*</span>
<a name="819" /><span class="True">     819:</span> <span class="k"> * clone_pgd_range(pgd_t *dst, pgd_t *src, int count);</span>
<a name="820" /><span class="True">     820:</span> <span class="k"> *</span>
<a name="821" /><span class="True">     821:</span> <span class="k"> *  dst - pointer to pgd range anwhere on a pgd page</span>
<a name="822" /><span class="True">     822:</span> <span class="k"> *  src - &quot;&quot;</span>
<a name="823" /><span class="True">     823:</span> <span class="k"> *  count - the number of pgds to copy.</span>
<a name="824" /><span class="True">     824:</span> <span class="k"> *</span>
<a name="825" /><span class="True">     825:</span> <span class="k"> * dst and src can be on the same page, but the range must not overlap,</span>
<a name="826" /><span class="True">     826:</span> <span class="k"> * and must not cross a page boundary.</span>
<a name="827" /><span class="True">     827:</span> <span class="k"> */</span>
<a name="828" /><span class="True">     828:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">clone_pgd_range</span><span class="f">(</span><span class="b">pgd_t</span> <span class="f">*</span><span class="b">dst</span><span class="f">,</span> <span class="b">pgd_t</span> <span class="f">*</span><span class="b">src</span><span class="f">,</span> <span class="m">int</span> <span class="b">count</span><span class="f">)</span>
<a name="829" /><span class="True">     829:</span> <span class="f">{</span>
<a name="830" /><span class="True">     830:</span>        <a href="cpu.c_macros_ref.html#_bWVtY3B5XzA_"><span class="b">memcpy</span></a><span class="f">(</span><span class="b">dst</span><span class="f">,</span> <span class="b">src</span><span class="f">,</span> <span class="b">count</span> <span class="f">*</span> <span class="m">sizeof</span><span class="f">(</span><span class="b">pgd_t</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="831" /><span class="True">     831:</span> <span class="f">}</span>
<a name="832" /><span class="True">     832:</span> 
<a name="833" /><span class="True">     833:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_UFRFX1NISUZUXzA_"><span class="b">PTE_SHIFT</span></a> <a href="cpu.c_macros_ref.html#_aWxvZzJfMA__"><span class="b">ilog2</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_UFRSU19QRVJfUFRFXzA_"><span class="b">PTRS_PER_PTE</span></a><span class="f">)</span>
<a name="834" /><span class="True">     834:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">page_level_shift</span><span class="f">(</span><span class="m">enum</span> <span class="b">pg_level</span> <span class="b">level</span><span class="f">)</span>
<a name="835" /><span class="True">     835:</span> <span class="f">{</span>
<a name="836" /><span class="True">     836:</span>     <span class="m">return</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a> <span class="f">-</span> <a href="cpu.c_macros_ref.html#_UFRFX1NISUZUXzA_"><span class="b">PTE_SHIFT</span></a><span class="f">)</span> <span class="f">+</span> <span class="b">level</span> <span class="f">*</span> <a href="cpu.c_macros_ref.html#_UFRFX1NISUZUXzA_"><span class="b">PTE_SHIFT</span></a><span class="f">;</span>
<a name="837" /><span class="True">     837:</span> <span class="f">}</span>
<a name="838" /><span class="True">     838:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">page_level_size</span><span class="f">(</span><span class="m">enum</span> <span class="b">pg_level</span> <span class="b">level</span><span class="f">)</span>
<a name="839" /><span class="True">     839:</span> <span class="f">{</span>
<a name="840" /><span class="True">     840:</span>     <span class="m">return</span> <span class="c">1UL</span> <span class="f">&lt;&lt;</span> <span class="b">page_level_shift</span><span class="f">(</span><span class="b">level</span><span class="f">)</span><span class="f">;</span>
<a name="841" /><span class="True">     841:</span> <span class="f">}</span>
<a name="842" /><span class="True">     842:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">unsigned</span> <span class="m">long</span> <span class="b">page_level_mask</span><span class="f">(</span><span class="m">enum</span> <span class="b">pg_level</span> <span class="b">level</span><span class="f">)</span>
<a name="843" /><span class="True">     843:</span> <span class="f">{</span>
<a name="844" /><span class="True">     844:</span>     <span class="m">return</span> <span class="f">~</span><span class="f">(</span><span class="b">page_level_size</span><span class="f">(</span><span class="b">level</span><span class="f">)</span> <span class="f">-</span> <span class="c">1</span><span class="f">)</span><span class="f">;</span>
<a name="845" /><span class="True">     845:</span> <span class="f">}</span>
<a name="846" /><span class="True">     846:</span> 
<a name="847" /><span class="True">     847:</span> <span class="k">/*</span>
<a name="848" /><span class="True">     848:</span> <span class="k"> * The x86 doesn&apos;t have any external MMU info: the kernel page</span>
<a name="849" /><span class="True">     849:</span> <span class="k"> * tables contain all the necessary information.</span>
<a name="850" /><span class="True">     850:</span> <span class="k"> */</span>
<a name="851" /><span class="True">     851:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">update_mmu_cache</span><span class="f">(</span><span class="m">struct</span> <span class="b">vm_area_struct</span> <span class="f">*</span><span class="b">vma</span><span class="f">,</span>
<a name="852" /><span class="True">     852:</span>         <span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">,</span> <span class="b">pte_t</span> <span class="f">*</span><span class="b">ptep</span><span class="f">)</span>
<a name="853" /><span class="True">     853:</span> <span class="f">{</span>
<a name="854" /><span class="True">     854:</span> <span class="f">}</span>
<a name="855" /><span class="True">     855:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">update_mmu_cache_pmd</span><span class="f">(</span><span class="m">struct</span> <span class="b">vm_area_struct</span> <span class="f">*</span><span class="b">vma</span><span class="f">,</span>
<a name="856" /><span class="True">     856:</span>         <span class="m">unsigned</span> <span class="m">long</span> <span class="b">addr</span><span class="f">,</span> <span class="b">pmd_t</span> <span class="f">*</span><span class="b">pmd</span><span class="f">)</span>
<a name="857" /><span class="True">     857:</span> <span class="f">{</span>
<a name="858" /><span class="True">     858:</span> <span class="f">}</span>
<a name="859" /><span class="True">     859:</span> 
<a name="860" /><span class="True">     860:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_swp_mksoft_dirty</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="861" /><span class="True">     861:</span> <span class="f">{</span>
<a name="862" /><span class="True">     862:</span>     <a href="cpu.c_macros_ref.html#_Vk1fQlVHX09OXzA_"><span class="b">VM_BUG_ON</span></a><span class="f">(</span><span class="b">pte_present</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="863" /><span class="True">     863:</span>     <span class="m">return</span> <span class="b">pte_set_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU1dQX1NPRlRfRElSVFlfMA__"><span class="b">_PAGE_SWP_SOFT_DIRTY</span></a><span class="f">)</span><span class="f">;</span>
<a name="864" /><span class="True">     864:</span> <span class="f">}</span>
<a name="865" /><span class="True">     865:</span> 
<a name="866" /><span class="True">     866:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">pte_swp_soft_dirty</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="867" /><span class="True">     867:</span> <span class="f">{</span>
<a name="868" /><span class="True">     868:</span>     <a href="cpu.c_macros_ref.html#_Vk1fQlVHX09OXzA_"><span class="b">VM_BUG_ON</span></a><span class="f">(</span><span class="b">pte_present</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="869" /><span class="True">     869:</span>     <span class="m">return</span> <span class="b">pte_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU1dQX1NPRlRfRElSVFlfMA__"><span class="b">_PAGE_SWP_SOFT_DIRTY</span></a><span class="f">;</span>
<a name="870" /><span class="True">     870:</span> <span class="f">}</span>
<a name="871" /><span class="True">     871:</span> 
<a name="872" /><span class="True">     872:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">pte_t</span> <span class="b">pte_swp_clear_soft_dirty</span><span class="f">(</span><span class="b">pte_t</span> <span class="b">pte</span><span class="f">)</span>
<a name="873" /><span class="True">     873:</span> <span class="f">{</span>
<a name="874" /><span class="True">     874:</span>     <a href="cpu.c_macros_ref.html#_Vk1fQlVHX09OXzA_"><span class="b">VM_BUG_ON</span></a><span class="f">(</span><span class="b">pte_present</span><span class="f">(</span><span class="b">pte</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="875" /><span class="True">     875:</span>     <span class="m">return</span> <span class="b">pte_clear_flags</span><span class="f">(</span><span class="b">pte</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_X1BBR0VfU1dQX1NPRlRfRElSVFlfMA__"><span class="b">_PAGE_SWP_SOFT_DIRTY</span></a><span class="f">)</span><span class="f">;</span>
<a name="876" /><span class="True">     876:</span> <span class="f">}</span>
<a name="877" /><span class="True">     877:</span> 
<a name="878" /><span class="True">     878:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="m">asm</span><span class="f">-</span><span class="b">generic</span><span class="f">/</span><span class="b">pgtable</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="879" /><span class="True">     879:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* __ASSEMBLY__ */</span>
<a name="880" /><span class="True">     880:</span> 
<a name="881" /><span class="True">     881:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _ASM_X86_PGTABLE_H */</span>
<a name="882" /><span class="True">     882:</span> </pre>
  </body>
</html>
